L'élément complexContent permet de définir un contenu complexe pour un élément XML.

<xsd:complexContent 
  id = ID 
  mixed = booléen 
  {tout attribut ayant un espace de noms 
        différent de celui du schéma...}>
  Contenu : (annotation?, (restriction | extension))
</xsd:complexContent>

L'élément complexContent possède deux attributs définissant le contenu complexe.

Attributs Description
id précise un identificateur unique pour l'élément.
mixed indique un contenu mixte (true) ou un contenu à base d'éléments seuls (false) par défaut.

L'élément complexContent ne peut être inclus que dans l'élément suivant :

Exemple [voir]
<?xml version="1.0"?>
<element_racine 
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
             xsi:noNamespaceSchemaLocation="c:\schema.xsd">
  <personne xsi:type="type_francaise">
  <nom>FRAGIL</nom>
  <prenom>Antoine</prenom>
  <adresse>10 rue des Anges</adresse>
  <code_postal>77200</code_postal>
  <ville>Torcy</ville>
  </personne>
  <personne xsi:type="type_autre">
  <nom>FARUGGI</nom>
  <prenom>Marco</prenom>
  <adresse>Via G.B. Vico, 33</adresse>
  <code_postal>00144</code_postal>
  <ville>Roma</ville>
  <pays>Italia</pays>
  </personne>
  <personne xsi:type="type_francaise">
  <nom>LEGER</nom>
  <prenom>Bruno</prenom>
  <adresse>22 rue des Poissonniers</adresse>
  <code_postal>75000</code_postal>
  <ville>Paris</ville>
  </personne>
</element_racine>

<xsd:schema 
         xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
         elementFormDefault="qualified">
  <xsd:complexType name="type_personne" block="restriction">
  <xsd:sequence>
      <xsd:element name="nom" type="xsd:string"/>
      <xsd:element name="prenom" type="xsd:string"/>
      <xsd:element name="adresse" type="xsd:string" />
  </xsd:sequence>
  </xsd:complexType>
  
  <xsd:complexType name="type_francaise">
  <xsd:complexContent>
      <xsd:extension base="type_personne">
        <xsd:sequence>
        <xsd:element name="code_postal" 
                          type="xsd:positiveInteger"/>
        <xsd:element name="ville" type="xsd:string"/>
        </xsd:sequence>
      </xsd:extension>
  </xsd:complexContent>
  </xsd:complexType>
  
  <xsd:complexType name="type_autre">
  <xsd:complexContent>
      <xsd:extension base="type_personne">
        <xsd:sequence>
        <xsd:element name="code_postal" 
                          type="xsd:positiveInteger"/>
        <xsd:element name="ville" type="xsd:string"/>
        <xsd:element name="pays" type="xsd:string"/>
        </xsd:sequence>
      </xsd:extension>
  </xsd:complexContent>
  </xsd:complexType>
  
  <xsd:element name="element_racine">
  <xsd:complexType>
      <xsd:sequence>
        <xsd:element name="personne" 
                        type="type_personne" 
                        maxOccurs="unbounded"/>
      </xsd:sequence>
  </xsd:complexType>
  </xsd:element>
</xsd:schema>