最新的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>