XSD复合元素

XSD复合元素

特点:

复合元素包含了其他的元素及/或属性。

什么是复合元素?

复合元素指包含其他元素及/或属性的 XML 元素。

复合元素的类型

有四种类型的复合元素:

  • 空元素

  • 包含其他元素的元素

  • 仅包含文本的元素

  • 包含元素和文本的元素

空元素
<product pid="1345"/>
包含其他元素的元素
<employee>
 <firstname>John</firstname>
 <lastname>Smith</lastname>
</employee>
仅包含文本的元素
<food type="dessert">Ice cream</food>
包含元素和文本的元素
<description>
It happend on <data lang="norwegian">03.03.99</data> ....
</description>

如何定义复合元素

两种方式

  • 直接对元素进行声明

    • <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>
    • 说明:

    • <!--
      complexType说明是复合元素类型,指示器 <sequence>意味着子元素必须以它们被声明的次序出现
      -->
  • 使用type属性,属性的作用是引用要使用的复合类型的名称

    • <xs:element name="employee" type="personinfo"/>

      <xs:complexType name="personinfo">
         <!--其子元素都可以用personinfo这个属性-->
       <xs:sequence>
         <xs:element name="firstname" type="xs:string"/>
         <xs:element name="lastname" type="xs:string"/>
       </xs:sequence>
      </xs:complexType>
    • 使用了上面所描述的方法,那么若干元素均可以使用相同的复合类型

    • <xs:element name="employee" type="personinfo"/>
      <xs:element name="student" type="personinfo"/>
      <xs:element name="member" 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>
    • 也可以在已有的复合元素之上以某个复合元素为基础,然后添加一些元素

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

 

posted @ 2021-04-10 19:24  俊king  阅读(107)  评论(0编辑  收藏  举报