最新的Web开发教程
 

XSD复杂的元素


一个复杂的元素包含其他元素和/或属性。


什么是一个复杂的元素?

一个复杂的元素是一个包含其他元素和/或属性的XML元素。

有四种复元素的:

  • 空元素
  • 只包含其他元素的元素
  • 只包含文字元素
  • 同时包含其他元素和文本元素

Note:每个元素都可以包含属性的!


复元素的实例

一个复杂的XML元素, "product" ,里面是空的:

<product pid="1345"/>

一个复杂的XML元素, "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模式两种不同的方式一个复杂元素:

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"元素可以有指复杂类型使用的名称类型属性:

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