XML Schema 复杂类型的定义上

7.XSD 复合元素 -- 复合元素指包含其他元素 及/或 属性的 XML 元素
     a.有四种类型的复合元素(这些元素均可包含属性):@空元素 @包含其他元素的元素 @仅包含文本的元素 @包含元素和文本的元素
         #复合元素,"product",是空的:<product pid="1345"/>
         #复合元素,"employee",仅包含其他元素:
            <employee>
               <firstname>John</firstname>
               <lastname>Smith</lastname>
            </employee>
         #复合元素,"food",仅包含文本:
             <food type="dessert">Ice cream</food>
         #复合元素,"description",包含元素和文本:
             <description>
                  It happened on <date lang="norwegian">03.03.99</date> ....
             </description>
     
      b.两种半方式来定义复合元素
      1. 通过命名此元素,可直接对"employee"元素进行声明,就像这样:
         <xs:element name="employee">
           <xs:complexType>
             <xs:sequence><!-- 表示子元素必须按声明的次序出现 -->
               <xs:element name="firstname" type="xs:string"/>
               <xs:element name="lastname" type="xs:string"/>
             </xs:sequence>
           </xs:complexType>
         </xs:element>
      2. "employee" 元素可以使用 type 属性,这个属性的作用是引用要使用的复合类型的名称
      <xs:element name="employee" type="personinfo"/>                                                
      <xs:complexType name="personinfo"><!-- 类型可以复用 -->
        <xs:sequence><!-- 依然得按照次序 -->                                   
          <xs:element name="firstname" type="xs:string"/>
          <xs:element name="lastname" type="xs:string"/>
        </xs:sequence>                                  
      </xs:complexType>
      2.5. 也可以在已有的复合元素之上以某个复合元素为基础,然后添加一些元素,就像这样
      <xs:element name="employee" type="fullpersoninfo"/>
      <xs:complexType name="personinfo">                  
        <xs:sequence>                                     
          <xs:element name="firstname" type="xs:string"/>
          <xs:element name="lastname" type="xs:string"/>  
        </xs:sequence>                                    
      </xs:complexType>                                   
                                                    
      <xs:complexType name="fullpersoninfo">              
        <xs:complexContent><!-- 表明将要拓展personinfo -->                               
          <xs:extension base="personinfo"><!-- 表示基于原来的类型 -->             
            <xs:sequence>                                 
              <xs:element name="address" type="xs:string"/>
              <xs:element name="city" type="xs:string"/>  
              <xs:element name="country" type="xs:string"/>
            </xs:sequence>                                
          </xs:extension>                                 
        </xs:complexContent>                              
      </xs:complexType>

8.XSD 复合空元素 -- 不能包含内容与元素,只能含有属性
<!--为了定义无内容的类型,我们就必须声明一个在其内容中只能包含元素的类型,但是实际上我们并不会声明任何元素-->
       <xs:element name="product">
         <xs:complexType>
           <xs:complexContent>
             <xs:restriction base="xs:integer"><!-- integer 限定则声明了一个属性但不会引入任何的元素内容 -->
               <xs:attribute name="prodid" type="xs:positiveInteger"/>
             </xs:restriction>
           </xs:complexContent>
         </xs:complexType>
       </xs:element>
<!-- 或者一种紧凑的方式 -->
        <xs:element name="product">                               
          <xs:complexType>                                        
            <xs:attribute name="prodid" type="xs:positiveInteger"/>
          </xs:complexType>                                       
        </xs:element>
<!-- 或者另一种紧凑的方式 -->
        <xs:element name="product" type="prodtype"/>                                    
        <xs:complexType name="prodtype">                        
          <xs:attribute name="prodid" type="xs:positiveInteger"/>
        </xs:complexType>

9.XSD 仅含元素复合类型 -- 仅包含其他元素的元素和属性
       <xs:element name="person">                          
         <xs:complexType>                                  
           <xs:sequence><!-- 子元素依照次序出现 -->                                   
             <xs:element name="firstname" type="xs:string"/>
             <xs:element name="lastname" type="xs:string"/>
           </xs:sequence>                                  
         </xs:complexType>                                 
       </xs:element>
       <!-- 另一种方式 -->                                           
       <xs:element name="person" type="persontype"/>                                           
       <xs:complexType name="persontype">                
         <xs:sequence>                                   
           <xs:element name="firstname" type="xs:string"/>
           <xs:element name="lastname" type="xs:string"/>
         </xs:sequence>                                  
       </xs:complexType>

10.XSD 仅含文本复合元素 -- 仅含文本的复合元素 可包含文本和属性
     <shoesize country="france">35</shoesize>定义如下:
     <xs:element name="shoesize"><!-- 声明了一个复合类型,其内容被定义为整数值,并且 "shoesize" 元素含有名为 "country" 的属性 -->                          
       <xs:complexType>                                     
         <xs:simpleContent> <!-- 仅包含简易的内容(文本和属性) -->                                
           <xs:extension base="xs:integer"><!-- 扩展基本简易类型 也可以<xs:restriction base="basetype">限制元素的基本简易类型 -->
             <xs:attribute name="country" type="xs:string" />
           </xs:extension>                                  
         </xs:simpleContent>                                
       </xs:complexType>                                    
     </xs:element>

11.XSD 带有混合内容的复合类型 -- 混合的复合类型可包含属性、元素以及文本
   <letter>                                                         
   Dear Mr.<name>John Smith</name>.                  
   Your order <orderid>1032</orderid>                
   will be shipped on <shipdate>2001-07-13</shipdate>.
   </letter>
   定义如下:
   <xs:element name="letter">                                                                           
     <xs:complexType mixed="true"><!-- 为了使字符数据可以出现在"letter"的子元素之间,mixed属性必须被设置为"true" -->
       <xs:sequence>                                          
         <xs:element name="name" type="xs:string"/>           
         <xs:element name="orderid" type="xs:positiveInteger"/>
         <xs:element name="shipdate" type="xs:date"/>         
       </xs:sequence>                                         
     </xs:complexType>                                        
   </xs:element>

12.XSD 复合类型指示器(七种) -- 控制在文档中使用元素的方式
        *Order            指示器--定义元素的顺序 :            All Choice Sequence          
        *Occurrence 指示器--定义某个元素出现的频率:maxOccurs   minOccurs         
        *Group           指示器--定义相关的数批元素:    Group name   attributeGroup name
       
     a.All 指示器 <all> 指示器规定子元素可以按照任意顺序出现,且每个子元素必须只出现一次
     b.Choice 指示器 <choice> 指示器规定可出现某个子元素或者可出现另外一个子元素(非此即彼
     c.Sequence 指示器 <sequence> 规定子元素必须按照特定的顺序出现
    
     d.maxOccurs 以及 minOccurs 的默认值均为 1
     e.maxOccurs 指示器 <maxOccurs> 指示器可规定某个元素可出现的{zd0}次数
    f.minOccurs 指示器 <minOccurs> 指示器可规定某个元素能够出现的最小次数
   <!-- 子元素 "child_name" 可在 "person" 元素中出现最少 0 次,最多出现 10 次 -->
   <xs:element name="person">                          
       <xs:complexType>                                  
         <xs:sequence>                                   
           <xs:element name="full_name" type="xs:string"/>
           <xs:element name="child_name" type="xs:string" maxOccurs="10" minOccurs="0"/>                
         </xs:sequence>                                  
       </xs:complexType>                                 
     </xs:element>
     <!-- 一个对应的例子 -->
     <?xml version="1.0" encoding="ISO-8859-1"?>                  
     <persons xmlns:xsi="" xsi:noNamespaceSchemaLocation="family.xsd">                  
       <person>                                                     
         <full_name>Tony Smith</full_name>                            
        <child_name>Cecilie</child_name>                             
        </person>                                                    
     <person>                                                     
         <full_name>David Smith</full_name>                           
        <child_name>Jogn</child_name>                                
         <child_name>mike</child_name>                                
         <child_name>kyle</child_name>                                
         <child_name>mary</child_name>
                                
        </person>                                                    
     <person>                                                     
         <full_name>Michael Smith</full_name>                         
        </person>
     </persons>
    
     g.元素组 必须在 <group> 声明内部定义一个 all、choice 或者 sequence 元素
     <xs:group name="persongroup">                     
       <xs:sequence>                                   
         <xs:element name="firstname" type="xs:string"/>
         <xs:element name="lastname" type="xs:string"/>
         <xs:element name="birthday" type="xs:date"/>  
       </xs:sequence>                                  
     </xs:group>                                       
                                                  
     <xs:element name="person" type="personinfo"/>     
                                                  
     <xs:complexType name="personinfo">                
       <xs:sequence>                                   
         <xs:group ref="persongroup"/><!-- 引用元素组 -->                 
         <xs:element name="country" type="xs:string"/>
       </xs:sequence>                                  
     </xs:complexType>
     h.属性组 通过 <attributeGroup> 声明来进行定义
     <xs:attributeGroup name="personattrgroup">              
       <xs:attribute name="firstname" type="xs:string"/>
       <xs:attribute name="lastname" type="xs:string"/>
       <xs:attribute name="birthday" type="xs:date"/>  
     </xs:attributeGroup>                              
                                                  
     <xs:element name="person">                        
       <xs:complexType>                                
         <xs:attributeGroup ref="personattrgroup"/><!-- 引用属性组 -->
       </xs:complexType>                               
     </xs:element>



郑重声明:资讯 【XML Schema 复杂类型的定义上】由 发布,版权归原作者及其所在单位,其原创性以及文中陈述文字和内容未经(企业库qiyeku.com)证实,请读者仅作参考,并请自行核实相关内容。若本文有侵犯到您的版权, 请你提供相关证明及申请并与我们联系(qiyeku # qq.com)或【在线投诉】,我们审核后将会尽快处理。
—— 相关资讯 ——