<?xml version='1.0'?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
            targetNamespace="http://www.castor.org/MasterTestSuite/xml/SourceGenerator/References"
            elementFormDefault="qualified">

    <xsd:element name="TestReference">
        <xsd:complexType>
            <xsd:sequence>
                <xsd:element name="element1" type="complexTest" maxOccurs="1"/>
                <xsd:element ref="topElement1"/>
                <xsd:element ref="topElement2"/>
                <xsd:element ref="topElement3"/>
                <xsd:element ref="topElement5"/>
            </xsd:sequence>
        </xsd:complexType>
    </xsd:element>

    <xsd:element name="topElement1">
        <xsd:complexType>
            <xsd:sequence>
                <xsd:element ref="topElement2" minOccurs='0'/>
            </xsd:sequence>
        </xsd:complexType>
    </xsd:element>

    <xsd:element name="topElement2">
        <xsd:complexType>
            <xsd:sequence>
                <xsd:element ref="topElement1" minOccurs='0'/>
            </xsd:sequence>
        </xsd:complexType>
    </xsd:element>

    <xsd:complexType name="complexTest">
        <xsd:sequence>
            <xsd:element name="element2" type="complexTest" minOccurs="0"/>
            <xsd:group ref="topGroup1" minOccurs='0'/>
        </xsd:sequence>
    </xsd:complexType>

    <xsd:group name="topGroup1">
        <xsd:sequence>
            <xsd:element name="element3" type="xsd:string"/>
        </xsd:sequence>
    </xsd:group>

    <xsd:element name="topElement3">
        <xsd:complexType>
            <xsd:sequence>
                <xsd:element name="element4">
                    <xsd:complexType mixed="true">
                        <xsd:choice minOccurs="0" maxOccurs="unbounded">
                            <xsd:element ref="topElement3" minOccurs='0'/>
                        </xsd:choice>
                    </xsd:complexType>
                </xsd:element>
             </xsd:sequence>
        </xsd:complexType>
    </xsd:element>

    <xsd:element name="topElement5" type="extendedComplex"/>

    <xsd:complexType name="extendedComplex">
        <xsd:complexContent>
            <xsd:extension base = "complexTest">
                <xsd:sequence>
                    <xsd:element name = "element6" type = "xsd:string" minOccurs = "0"/>
                </xsd:sequence>
            </xsd:extension>
        </xsd:complexContent>
    </xsd:complexType>

</xsd:schema>
