XSD Komplekse elementer

Komplekse elementer indeholder andre elementer og/eller egenskaber.

Hvad er et komplekst element?

Komplekse elementer er XML-elementer, der indeholder andre elementer og/eller egenskaber.

Der er fire typer komplekse elementer:

  • Tomme elementer
  • Elementer, der indeholder andre elementer
  • Elementer, der kun indeholder tekst
  • Elementer, der indeholder elementer og tekst

Bemærk:Disse elementer kan alle indeholde egenskaber!

Eksempler på komplekse elementer

Den komplekse element, "product", er tom:

<product pid="1345"/>

Den komplekse element, "employee", indeholder kun andre elementer:

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

Den komplekse element, "food", indeholder kun tekst:

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

Den komplekse element, "description", indeholder elementer og tekst:

<description>
Det skete den <date lang="norwegian">03.03.99</date> ....
</description>

Hvordan definerer man en kompleks element?

Se denne komplekse XML-element, "employee", som kun indeholder andre elementer:

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

I XML Schema har vi to måder at definere en kompleks element på:

1. Ved at navngive dette element, kan du direkte erklære elementet "employee", sådan her:

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

Hvis du bruger den beskrevne metode, kan kun "employee" bruge den definerede komplekse type. Bemærk, at underelementerne, "firstname" og "lastname", er omgivet af indikatoren <sequence>. Dette betyder, at underelementerne skal optræde i den rækkefølge, de er deklarerede. Du vil finde XSD-indikatorer Lær mere om indikatorer i dette afsnit.

2. "employee"-elementet kan bruge type-attributten, som bruges til at referere til navnet på den komplekse type, der skal bruges:

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

Hvis du har brugt den beskrevne metode, kan flere elementer bruge den samme komplekse type, såsom dette:

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

Du kan også bygge på eksisterende komplekse elementer ved at bruge et komplekst element som grundlag og derefter tilføje nogle elementer, som dette:

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