XML Schema 教程
1. XML Schema 教程 2. XML Schemas 简介 3. 为什么使用 XML Schema? 4. 如何使用 XML Schema 5. XML schema 元素 6. XSD 简易元素 7. XML Schema 属性 8. XML Schema 限定 / Facets 9. XML Schema 复合元素 10. XML Schema 复合空元素 11. XML Schema 复合类型 – 仅含元素 12. XML Schema 复合元素 – 仅含文本 13. XML Schema 复合类型 – 混合内容 14. XML Schema 指示器 15. XML Schema any 元素 16. XML Schema anyAttribute 元素 17. XML Schema 元素替换 18. XML Schema 实例 19. XML Schema 字符串数据类型 20. XML Schema 日期/时间 数据类型 21. XML Schema 数值数据类型 22. XML Schema 杂项数据类型 23. XML Schema 总结 24. XML Schema 参考手册

XML Schema 复合元素

XSD 复合元素


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


什么是复合元素?

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

有四种类型的复合元素:

  • 空元素
  • 包含其他元素的元素
  • 仅包含文本的元素
  • 包含元素和文本的元素

注意: 上述元素均可包含属性!


复合元素的例子

复合元素,"product",是空的:

<product pid="1345"/>

复合元素,"employee",仅包含其他元素:

<employee>
  <firstname>John</firstname>
  <lastname>Smith</lastname>
</employee>

复合 XML 元素,"food",仅包含文本:

<food type="dessert">Ice cream</food>

复合XML元素,"description"包含元素和文本:

<description>
It happened on <date lang="norwegian">03.03.99</date> ....
</description>


如何定义复合元素?

请看这个复合 XML 元素,"employee",仅包含其他元素:

<employee>
  <firstname>John</firstname>
  <lastname>Smith</lastname>
</employee>

在 XML Schema 中,我们有两种方式来定义复合元素:

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>

假如您使用上面所描述的方法,那么仅有 "employee" 可使用所规定的复合类型。请注意其子元素,"firstname" 以及 "lastname",被包围在指示器 <sequence>中。这意味着子元素必须以它们被声明的次序出现。您会在 XSD 指示器 这一节学习更多有关指示器的知识。

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>

如果您使用了上面所描述的方法,那么若干元素均可以使用相同的复合类型,比如这样:

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