L'élément complexType définit un type de données complexe pour des éléments XML.

<xsd:complexType 
  abstract = booléen : false
  block = (#all | Liste de (extension | restriction)) 
  final = (#all | Liste de (extension | restriction)) 
  id = ID 
  mixed = booléen : false
  name = NCName
  {tout attribut ayant un espace de noms 
        différent de celui du schéma...}>
  Contenu : (annotation?, (simpleContent | complexContent | 
                 ((group | all | choice | séquence)?, 
                 ((attribute | attributeGroup)*, anyAttribute?))))
</xsd:complexType>

L'élément complexType possède plusieurs attributs destinés à définir les caractéristiques du type de données complexe.

Attributs Description
abstract provoque l'abstraction (true) de l'élément XML, devant être remplacé par un autre élément.
block spécifie une valeur de blocage du type dans des éléments attendant le type de base.
default précise une valeur par défaut pour l'élément.
final empêche la dérivation de type par restriction, extension ou les deux.
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.
name indique le nom de l'élément XML.

L'élément complexType ne peut être inclus que dans les éléments suivants :

Exemple [voir]
<?xml version="1.0" encoding="ISO-8859-1"?>
<element_racine 
          attribut_racine="valeur" 
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
          xsi:noNamespaceSchemaLocation="c:\schema.xsd">
  <element_enfant attribut_enfant="valeur">
  10 000 000 euros
  </element_enfant>
  <element_enfant 
                attribut_enfant="valeur"
                snd_attribut_enfant="valeur">
  <element_petit_enfant attribut_petit_enfant="valeur"/>
  Chaîne de caractères...
  </element_enfant>
  <![CDATA[<p>Un texte...</p>]]>
</element_racine>

<?xml version="1.0" encoding="ISO-8859-1"?>
<xsd:schema 
          xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
          elementFormDefault="qualified">
  <xsd:complexType name="element_enfantType" mixed="true">
  <xsd:choice minOccurs="0" maxOccurs="unbounded">
      <xsd:element name="element_petit_enfant" 
                         type="element_petit_enfantType"/>
  </xsd:choice>
  <xsd:attribute name="attribut_enfant" 
                         type="xsd:string" use="required"/>
  <xsd:attribute name="snd_attribut_enfant" 
                         type="xsd:string"/>
  </xsd:complexType>
  <xsd:complexType name="element_petit_enfantType">
  <xsd:attribute name="attribut_petit_enfant" 
                         type="xsd:string" 
                         use="required"/>
  </xsd:complexType>
  <xsd:element name="element_racine">
  <xsd:complexType mixed="true">
      <xsd:choice minOccurs="0" maxOccurs="unbounded">
        <xsd:element name="element_enfant" 
                         type="element_enfantType"/>
      </xsd:choice>
      <xsd:attribute name="attribut_racine" 
                         type="xsd:string" 
                         use="required"/>
  </xsd:complexType>
  </xsd:element>
</xsd:schema>