XML Schema中simpleContent和complexContent的区别

版权声明:声明原创,转载请注明网址或作者 https://blog.csdn.net/qq_34419607/article/details/86065979

 

说是complexType和simpleType的区别,其实主要区分的是simpleContent和complexContent的区别。

complexType下的complexContent和simpleContent    | simpleType下没有Content这个选项 

complexType+(。。。——simpleContent或complexContent。。。)+restriction或extension    其中restriction或extension的base属性只能是复合类型   ||     simpleType+restriction(可以用于element或attribute)    restriction或extension的base属性只能是简单类型xs:positiveInteger
————————————————
一、simpleContent:restriction和extension是有区别的:base属性的引用类型不同(用于限制元素自己的值类型)    |    
用途2种:后面只+attribute,也可以不+attribute,这时只能为空(只修饰element内容)  |     用于text only    
* restriction(base属性必须是复杂类型数据引用)+(xmlns:ns1="http://www.w3schools.com”和targetNamespace="http://www.w3schools.com”必须有,且调用方必须加前缀)
* extension(是简单类型的——内置的xs:string 或 simpleType的引用)

二、complexContent:元素下有元素,且complexContent下必须接extension或restriction  |  
用途3种:empty(紧凑型),elementOnly,Mixed
* restriction用于绑定属性
* extension用于扩展子元素(配合指示器,另一个是在其它sequence基础上(复用其它sequence基础上)在添加自己的sequence序列;            extension和restriction的base属性必须是 复杂类型引用    与simpleContent下的extension不一样,simpleContent下必须是简单类型的)

————————————————————
一:simpleContent

1、extension例子:
<xs:element name="shoesize">
  <xs:complexType>
    <xs:simpleContent>
      <xs:extension base="xs:integer">
        <xs:attribute name="country" type="xs:string" />
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>
</xs:element>
或没有属性
<xs:element name="shoesize">
  <xs:complexType>
    <xs:simpleContent>
      <xs:extension base="xs:integer">
                                            //空就行了,不能用simpleType里的声明length,pattern的属性
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>
</xs:element>

2、restriction例子:
<xs:complexType name="FamilyMountainBikeSizes">
   <xs:simpleContent>
      <xs:extension base="xs:string">
         <xs:attribute name="familyMember" type="xs:string" />
      </xs:extension>
   </xs:simpleContent>
</xs:complexType>

<xs:complexType name="ChildMountainBikeSizes">
    <xs:simpleContent>
        <xs:restriction base="ns1:FamilyMountainBikeSizes">
            <xs:enumeration value="small"/>
            <xs:enumeration value="medium"/>
        </xs:restriction>
    </xs:simpleContent>
</xs:complexType>


二:complexContent

1、restriction
属性的例子:
<xs:element name="product">
  <xs:complexType>
    <xs:complexContent>
      <xs:restriction base="ns1:TT">
        <xs:attribute name="test" type="xs:string" fixed="abc"/>    必须是复杂类型引用,而且restriction只能 增加 引用的类型 的属性,名字和类型都不能变(照抄)
      </xs:restriction>
    </xs:complexContent>
  </xs:complexType>
</xs:element>

<xs:complexType name="TT">
    <xs:attribute name="test" type="xs:string"/>
</xs:complexType>

元素的例子:
<xs:complexType name="address">
  <xs:sequence>
    <xs:element name="street" type="xs:string" />
    <xs:element name="city" type="xs:string" />
    <xs:element name="zipcode" type="xs:integer" />
    <xs:element name="country" type="xs:string" />
  </xs:sequence>
</xs:complexType>

<xs:complexType name="USAddress">
  <xs:complexContent>
    <xs:restriction base="address">
      <xs:sequence>
        <xs:element name="street" type="xs:string" />
        <xs:element name="city" type="xs:string" />
        <xs:element name="zipcode" type="xs:integer" />
        <xs:element name="country" type="xs:string" fixed="US" />
      </xs:sequence>
    </xs:restriction>
  </xs:complexContent>
</xs:complexType>

紧凑的:必须是空元素,必须有属性的写法才能紧凑
<xs:element name="product">
  <xs:complexType>
    <xs:complexContent>
      <xs:restriction base="xs:integer">    其实这种写法根本就是错误的,因为complexContent下的restriction和extension都必须是复杂类型的引用,这里只是说明一下罢了,其实根本不存在这样的写法
        <xs:attribute name="prodid" type="xs:positiveInteger"/>
      </xs:restriction>
    </xs:complexContent>
  </xs:complexType>
</xs:element>
紧凑:
<xs:element name="product" type="prodtype"/>
<xs:complexType name="prodtype">
  <xs:attribute name="prodid" type="xs:positiveInteger"/>
</xs:complexType>

2、extension
第一个例子:配合指示器choice    all(任何顺序,但必须出现且仅能出现一次),choice(n选1且只能选1),sequence;
maxOccurs和minOccurs作为属性修饰element内部     maxOccurs=“unbounded"

<xsd:complexType name="ProductType">
  <xsd:sequence>
    <xsd:element name="number"   type="ProdNumType"/>
    <xsd:element name="name"  type="xsd:string"/>
  </xsd:sequence>
</xsd:complexType>

<xsd:complexType name="ShirtType">     
  <xsd:complexContent>
    <xsd:extension base="ProductType">    
      <xsd:choice maxOccurs="unbounded">  
        <xsd:element name="size" type="SizeType"/>
        <xsd:element name="color" type= "ColorType"/>
      </xsd:choice>
    </xsd:extension>
  </xsd:complexContent>
</xsd:complexType>

另一个例子:复用别人sequence,再+自己的sequence
<xs:element name="employee" type="ns1: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>
        <xs:extension base="ns1: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>
base指定的Type在前,在什么什么的基础上再追加(在后面追加)

猜你喜欢

转载自blog.csdn.net/qq_34419607/article/details/86065979