XSD - V1

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
    <xs:import schemaLocation="http://www.w3.org/2001/xml.xsd" namespace="http://www.w3.org/XML/1998/namespace"/>
    <xs:element name="catalog">
        <xs:complexType>
            <xs:sequence>
                <xs:element ref="document_types" minOccurs="0"/>
                <xs:element ref="x_object_types" minOccurs="0"/>
                <xs:element ref="attribute_sets" minOccurs="0"/>
                <xs:element ref="eav_attributes" minOccurs="0"/>
                <xs:element ref="catalog_views" minOccurs="0"/>
                <xs:element ref="documents" minOccurs="0"/>
                <xs:element ref="medias" minOccurs="0"/>
                <xs:element ref="skus" minOccurs="0"/>
                <xs:element ref="classification_assignments" minOccurs="0"/>
            </xs:sequence>
            <xs:attribute name="datetime" use="optional" type="xs:NMTOKEN"/>
            <xs:attribute name="mode" use="required" type="xs:NCName"/>
        </xs:complexType>
    </xs:element>
    <xs:element name="document_types">
        <xs:complexType>
            <xs:sequence>
                <xs:element maxOccurs="unbounded" ref="document_type"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
    <xs:element name="x_object_types">
        <xs:complexType>
            <xs:sequence>
                <xs:element maxOccurs="unbounded" ref="x_object_type"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
    <xs:element name="x_object_type">
        <xs:complexType>
            <xs:sequence>
                <xs:element ref="name" minOccurs="0"/>
                <xs:element ref="owner_linked_class"/>
                <xs:element ref="target_linked_class"/>
                <xs:element ref="owner_document_type"/>
                <xs:element ref="target_document_type"/>
                <xs:element ref="maximum"/>
                <xs:element ref="sequence"/>
            </xs:sequence>
            <xs:attribute name="code" use="required" type="xs:NCName"/>
        </xs:complexType>
    </xs:element>
    <xs:element name="owner_linked_class" type="xs:NCName"/>
    <xs:element name="target_linked_class" type="xs:NCName"/>
    <xs:element name="owner_document_type" type="xs:string"/>
    <xs:element name="target_document_type" type="xs:string"/>
    <xs:element name="maximum">
        <xs:complexType/>
    </xs:element>
    <xs:element name="eav_attributes">
        <xs:complexType>
            <xs:sequence>
                <xs:element maxOccurs="unbounded" ref="eav_attribute"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
    <xs:element name="eav_attribute">
        <xs:complexType>
            <xs:sequence>
                <xs:element ref="document_type"/>
                <xs:element ref="eav_attribute_group"/>
                <xs:element minOccurs="0" maxOccurs="unbounded" ref="name"/>
                <xs:element minOccurs="0" maxOccurs="unbounded" ref="description"/>
                <xs:element minOccurs="0" ref="helptext"/>
                <xs:element minOccurs="0" ref="values"/>
                <xs:element minOccurs="0" ref="attribute_sets"/>
                <xs:element minOccurs="0" ref="control_type"/>
                <xs:element minOccurs="0" ref="datatype"/>
                <xs:element minOccurs="0" ref="textsize"/>
                <xs:element minOccurs="0" ref="decimal_after_digit"/>
                <xs:element minOccurs="0" ref="mandatory"/>
                <xs:element minOccurs="0" ref="regex_validation"/>
                <xs:element minOccurs="0" ref="searchable"/>
                <xs:element minOccurs="0" ref="filterable"/>
                <xs:element minOccurs="0" ref="internal_view"/>
                <xs:element minOccurs="0" ref="internal_edit"/>
                <xs:element minOccurs="0" ref="sequence"/>
            </xs:sequence>
            <xs:attribute name="code" use="required" type="xs:NCName"/>
        </xs:complexType>
    </xs:element>
    <xs:element name="values">
        <xs:complexType>
            <xs:sequence>
                <xs:element maxOccurs="unbounded" ref="value"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
    <xs:element name="helptext">
        <xs:complexType mixed="true">
            <xs:attribute ref="xml:lang" use="required"/>
        </xs:complexType>
    </xs:element>
    <xs:element name="control_type" type="xs:string"/>
    <xs:element name="datatype" type="xs:NCName"/>
    <xs:element name="textsize" type="xs:string"/>
    <xs:element name="decimal_after_digit" type="xs:string"/>
    <xs:element name="mandatory" type="xs:boolean"/>
    <xs:element name="regex_validation" type="xs:string"/>
    <xs:element name="searchable" type="xs:boolean"/>
    <xs:element name="filterable" type="xs:boolean"/>
    <xs:element name="internal_view" type="xs:boolean"/>
    <xs:element name="internal_edit" type="xs:boolean"/>
    <xs:element name="catalog_views">
        <xs:complexType>
            <xs:sequence>
                <xs:element ref="catalog_view"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
    <xs:element name="catalog_view">
        <xs:complexType>
            <xs:sequence>
                <xs:element minOccurs="0" maxOccurs="unbounded" ref="name"/>
                <xs:element minOccurs="0" maxOccurs="unbounded" ref="description"/>
                <xs:element ref="classifications"/>
            </xs:sequence>
            <xs:attribute name="code" use="required" type="xs:NCName"/>
        </xs:complexType>
    </xs:element>
    <xs:element name="classifications">
        <xs:complexType>
            <xs:sequence>
                <xs:element maxOccurs="unbounded" ref="classification"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
    <xs:element name="classification">
        <xs:complexType>
            <xs:sequence>
                <xs:element ref="active"/>
                <xs:element ref="parent" minOccurs="0" />
                <xs:element ref="name" minOccurs="0" />
                <xs:element ref="description" minOccurs="0" />
                <xs:element ref="custom_eav_attribute" minOccurs="0" maxOccurs="unbounded"/>
            </xs:sequence>
            <xs:attribute name="code" use="required" type="xs:NMTOKEN"/>
        </xs:complexType>
    </xs:element>
    <xs:element name="parent" type="xs:string"/>
    <xs:element name="documents">
        <xs:complexType>
            <xs:sequence>
                <xs:element minOccurs="0" maxOccurs="unbounded" ref="document"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
    <xs:element name="document">
        <xs:complexType>
            <xs:sequence>
                <xs:element ref="document_type"/>
                <xs:element ref="active"/>
                <xs:element minOccurs="0" ref="attribute_set_code"/>
                <xs:element minOccurs="0" ref="name"/>
                <xs:element minOccurs="0" ref="description"/>
                <xs:element maxOccurs="unbounded" ref="custom_eav_attribute"/>
                <xs:element minOccurs="0" ref="x_objects"/>
                <xs:element minOccurs="0" ref="sku_links" />
                <xs:element minOccurs="0" ref="workflow_statuses"/>
            </xs:sequence>
            <xs:attribute name="code" use="required"/>
        </xs:complexType>
    </xs:element>
    <xs:element name="attribute_set_code" type="xs:string"/>
    <xs:element name="description">
        <xs:complexType mixed="true">
            <xs:attribute ref="xml:lang" use="required"/>
        </xs:complexType>
    </xs:element>
    <xs:element name="x_objects">
        <xs:complexType>
            <xs:sequence>
                <xs:element maxOccurs="unbounded" minOccurs="0" ref="x_object"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
    <xs:element name="x_object">
        <xs:complexType>
            <xs:sequence>
                <xs:element ref="owner_code"/>
                <xs:element ref="target_code"/>
                <xs:element minOccurs="0" ref="active"/>
                <xs:element minOccurs="0" ref="filename"/>
                <xs:element minOccurs="0" ref="url"/>
                <xs:element minOccurs="0" maxOccurs="unbounded" ref="media_url"/>
                <xs:element minOccurs="0" ref="original_filename"/>
                <xs:element minOccurs="0" ref="mime_type"/>
                <xs:element minOccurs="0" ref="checksum"/>
                <xs:element ref="sequence"/>
                <xs:element minOccurs="0" maxOccurs="unbounded" ref="custom_eav_attribute"/>
            </xs:sequence>
            <xs:attribute name="id" use="required" type="xs:integer"/>
            <xs:attribute name="x_object_type_code" use="required" type="xs:NCName"/>
        </xs:complexType>
    </xs:element>
    <xs:element name="owner_code" type="xs:string"/>
    <xs:element name="target_code" type="xs:string"/>
    <xs:element name="sku_links">
        <xs:complexType>
            <xs:sequence>
                <xs:element maxOccurs="unbounded" ref="sku_link"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
    <xs:element name="sku_link">
        <xs:complexType>
            <xs:attribute name="code" use="required" type="xs:string"/>
            <xs:attribute name="sequence" use="required"/>
        </xs:complexType>
    </xs:element>
    <xs:element name="workflow_statuses">
        <xs:complexType>
            <xs:sequence>
                <xs:element maxOccurs="unbounded" ref="value"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
    <xs:element name="skus">
        <xs:complexType>
            <xs:sequence>
                <xs:element minOccurs="0" maxOccurs="unbounded" ref="sku"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
    <xs:element name="sku">
        <xs:complexType>
            <xs:sequence>
                <xs:element ref="active"/>
                <xs:element minOccurs="0" ref="name"/>
                <xs:element maxOccurs="unbounded" ref="custom_eav_attribute"/>
                <xs:element minOccurs="0" ref="x_objects"/>
            </xs:sequence>
            <xs:attribute name="code" use="required" type="xs:string"/>
        </xs:complexType>
    </xs:element>
    <xs:element name="medias">
        <xs:complexType>
            <xs:sequence>
                <xs:element minOccurs="0" maxOccurs="unbounded" ref="media"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
    <xs:element name="media">
        <xs:complexType>
            <xs:sequence>
                <xs:element ref="active"/>
                <xs:element ref="name"/>
                <xs:element ref="url"/>
                <xs:element ref="filename"/>
                <xs:element ref="original_filename"/>
                <xs:element ref="mime_type"/>
                <xs:element ref="checksum"/>
            </xs:sequence>
            <xs:attribute name="code" use="required" type="xs:string"/>
        </xs:complexType>
    </xs:element>
    <xs:element name="media_url">
        <xs:complexType  mixed="true">
            <xs:attribute name="type" type="xs:string"/>
        </xs:complexType>
    </xs:element>
    <xs:element name="filename" type="xs:string"/>
    <xs:element name="original_filename" type="xs:string"/>
    <xs:element name="mime_type" type="xs:string"/>
    <xs:element name="checksum" type="xs:string"/>
    <xs:element name="classification_assignments">
        <xs:complexType>
            <xs:sequence>
                <xs:element minOccurs="0" maxOccurs="unbounded" ref="classification_assignment"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
    <xs:element name="classification_assignment">
        <xs:complexType>
            <xs:attribute name="classification_code" use="required" type="xs:NMTOKEN"/>
            <xs:attribute name="document_code" use="required"/>
            <xs:attribute name="type" use="required" type="xs:NCName"/>
        </xs:complexType>
    </xs:element>
    <xs:element name="document_type">
        <xs:complexType mixed="true">
            <xs:choice minOccurs="0" maxOccurs="unbounded">
                <xs:element ref="eav_attribute_groups"/>
                <xs:element ref="name"/>
                <xs:element ref="entity"/>
                <xs:element ref="use_sku"/>
            </xs:choice>
            <xs:attribute name="code"/>
        </xs:complexType>
    </xs:element>
    <xs:element name="entity" type="xs:NCName"/>
    <xs:element name="use_sku" type="xs:boolean"/>
    <xs:element name="name">
        <xs:complexType mixed="true">
            <xs:attribute ref="xml:lang"/>
        </xs:complexType>
    </xs:element>
    <xs:element name="label">
        <xs:complexType mixed="true">
            <xs:attribute ref="xml:lang"/>
        </xs:complexType>
    </xs:element>
    <xs:element name="sequence" />
    <xs:element name="attribute_sets">
        <xs:complexType>
            <xs:sequence>
                <xs:element maxOccurs="unbounded" ref="attribute_set"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
    <xs:element name="attribute_set">
        <xs:complexType mixed="true">
            <xs:choice minOccurs="0" maxOccurs="unbounded">
                <xs:element ref="document_type"/>
                <xs:element ref="name"/>
            </xs:choice>
            <xs:attribute name="code" />
        </xs:complexType>
    </xs:element>
    <xs:element name="eav_attribute_group">
        <xs:complexType mixed="true">
            <xs:sequence>
                <xs:element minOccurs="0" maxOccurs="unbounded" ref="name"/>
            </xs:sequence>
            <xs:attribute name="code"/>
        </xs:complexType>
    </xs:element>
    <xs:element name="value">
        <xs:complexType mixed="true">
            <xs:sequence>
                <xs:element minOccurs="0" maxOccurs="unbounded" ref="label"/>
                <xs:element minOccurs="0" maxOccurs="unbounded" ref="name"/>
                <xs:element minOccurs="0" maxOccurs="unbounded" ref="description"/>
            </xs:sequence>
            <xs:attribute name="code"/>
            <xs:attribute ref="xml:lang"/>
        </xs:complexType>
    </xs:element>
    <xs:element name="active" type="xs:boolean"/>
    <xs:element name="custom_eav_attribute">
        <xs:complexType>
            <xs:sequence>
                <xs:element minOccurs="0" maxOccurs="unbounded" ref="value"/>
            </xs:sequence>
            <xs:attribute name="code" use="required" type="xs:NCName"/>
        </xs:complexType>
    </xs:element>
    <xs:element name="url" type="xs:string"/>
    <xs:element name="eav_attribute_groups">
        <xs:complexType>
            <xs:choice minOccurs="0" maxOccurs="unbounded">
                <xs:element ref="eav_attribute_group"/>
                <xs:element ref="eav_attribute_groups"/>
            </xs:choice>
        </xs:complexType>
    </xs:element>
</xs:schema>