xs:complexContent se utiliza para definir extensiones o restricciones sobre tipos complejos. Esto permite a los diseñadores de esquemas modificar tipos complejos heredados añadiendo elementos, atributos o alterando la estructura de contenidos de un tipo base. Dentro del contexto de xs:complexContent, puedes encontrar modelos de contenido vacíos, modelos de contenido con elementos únicamente (modelos "puros"), y modelos de contenido mixtos.
Un contenido vacío indica que un tipo complejo no debe contener ningún elemento o texto. Esto se usa cuando quieres definir un tipo que solo contiene atributos o cuando específicamente que un elemento no tenga contenido. Un contenido vacío se puede definir usando xs:complexType con un xs:sequence vacío.
<xs:complexType name="TipoVacio">
<xs:sequence/>
</xs:complexType>
<xs:complexType name="TipoVacio">
<xs:sequence></xs:sequence>
</xs:complexType>
Un modelo de contenido "puro" se refiere a un tipo complejo que solo contiene elementos, sin texto mezclado. Esto se logra especificando los elementos dentro de xs:sequence, xs:all, o xs:choice sin habilitar el contenido mixto.
<xs:complexType name="TipoConElementos">
<xs:sequence>
<xs:element name="elemento1" type="xs:string"/>
<xs:element name="elemento2" type="xs:int"/>
</xs:sequence>
</xs:complexType>
Los contenidos mixtos permiten que un elemento contenga una combinación de texto y elementos (otros tipos complejos o simples). Esto es útil para modelar contenido de documentos o datos que son inherentemente mixtos, como contenido HTML o ciertos formatos de documento. Se especifica usando xs:complexType con el atributo mixed establecido en true.
<xs:complexType mixed="true">
<xs:sequence>
<xs:element name="subelemento" type="xs:string"/>
</xs:sequence>
</xs:complexType>