<!--
  ~ Licensed to the Apache Software Foundation (ASF) under one
  ~ or more contributor license agreements. See the NOTICE file
  ~ distributed with this work for additional information
  ~ regarding copyright ownership. The ASF licenses this file
  ~ to you under the Apache License, Version 2.0 (the
  ~ "License"); you may not use this file except in compliance
  ~ with the License. You may obtain a copy of the License at
  ~
  ~ http://www.apache.org/licenses/LICENSE-2.0
  ~
  ~ Unless required by applicable law or agreed to in writing,
  ~ software distributed under the License is distributed on an
  ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
  ~ KIND, either express or implied. See the License for the
  ~ specific language governing permissions and limitations
  ~ under the License.
  -->

<schema targetNamespace="http://types.echo.services"
        xmlns="http://www.w3.org/2001/XMLSchema"
        xmlns:tns="http://types.echo.services"
        xmlns:xsd="http://www.w3.org/2001/XMLSchema"
        elementFormDefault="qualified">


    <!-- test elements for xsd:anyType -->
    <element name="TestAnyType1">
        <complexType>
            <sequence>
                <element name="testValue" type="xsd:anyType" minOccurs="0" maxOccurs="unbounded"
                         nillable="true"/>
            </sequence>
        </complexType>
    </element>
    <element name="TestAnyType2">
        <complexType>
            <sequence>
                <element name="testValue" type="xsd:anyType" minOccurs="0" nillable="true"/>
            </sequence>
        </complexType>
    </element>
    <element name="TestAnyType3">
        <complexType>
            <sequence>
                <element name="testValue" type="xsd:anyType" minOccurs="0" maxOccurs="unbounded"/>
            </sequence>
        </complexType>
    </element>
    <element name="TestAnyType4">
        <complexType>
            <sequence>
                <element name="testValue" type="xsd:anyType" minOccurs="0"/>
            </sequence>
        </complexType>
    </element>
    <element name="TestAnyType5">
        <complexType>
            <sequence>
                <element name="testValue" type="xsd:anyType" nillable="true" maxOccurs="unbounded"/>
            </sequence>
        </complexType>
    </element>
    <element name="TestAnyType6">
        <complexType>
            <sequence>
                <element name="testValue" type="xsd:anyType" nillable="true"/>
            </sequence>
        </complexType>
    </element>
    <element name="TestAnyType7">
        <complexType>
            <sequence>
                <element name="testValue" type="xsd:anyType" maxOccurs="unbounded"/>
            </sequence>
        </complexType>
    </element>
    <element name="TestAnyType8">
        <complexType>
            <sequence>
                <element name="testValue" type="xsd:anyType"/>
            </sequence>
        </complexType>
    </element>

    <!-- generating elemens for primitive types -->
    <element name="testInt1">
        <complexType>
            <sequence>
                <element name="testValue" minOccurs="0" nillable="true" maxOccurs="unbounded" type="xsd:int"/>
            </sequence>
        </complexType>
    </element>
    <element name="testInt2">
        <complexType>
            <sequence>
                <element name="testValue" minOccurs="0" nillable="true" type="xsd:int"/>
            </sequence>
        </complexType>
    </element>
    <element name="testInt3">
        <complexType>
            <sequence>
                <element name="testValue" minOccurs="0" maxOccurs="unbounded" type="xsd:int"/>
            </sequence>
        </complexType>
    </element>
    <element name="testInt4">
        <complexType>
            <sequence>
                <element name="testValue" minOccurs="0" type="xsd:int"/>
            </sequence>
        </complexType>
    </element>
    <element name="testInt5">
        <complexType>
            <sequence>
                <element name="testValue" nillable="true" maxOccurs="unbounded" type="xsd:int"/>
            </sequence>
        </complexType>
    </element>
    <element name="testInt6">
        <complexType>
            <sequence>
                <element name="testValue" nillable="true" type="xsd:int"/>
            </sequence>
        </complexType>
    </element>
    <element name="testInt7">
        <complexType>
            <sequence>
                <element name="testValue" maxOccurs="unbounded" type="xsd:int"/>
            </sequence>
        </complexType>
    </element>
    <element name="testInt8">
        <complexType>
            <sequence>
                <element name="testValue" type="xsd:int"/>
            </sequence>
        </complexType>
    </element>

    <!-- generating elemens for string types -->
    <element name="testString1">
        <complexType>
            <sequence>
                <element name="testValue" minOccurs="0" nillable="true" maxOccurs="unbounded"
                         type="xsd:string"/>
            </sequence>
        </complexType>
    </element>
    <element name="testString2">
        <complexType>
            <sequence>
                <element name="testValue" minOccurs="0" nillable="true" type="xsd:string"/>
            </sequence>
        </complexType>
    </element>
    <element name="testString3">
        <complexType>
            <sequence>
                <element name="testValue" minOccurs="0" maxOccurs="unbounded" type="xsd:string"/>
            </sequence>
        </complexType>
    </element>
    <element name="testString4">
        <complexType>
            <sequence>
                <element name="testValue" minOccurs="0" type="xsd:string"/>
            </sequence>
        </complexType>
    </element>
    <element name="testString5">
        <complexType>
            <sequence>
                <element name="testValue" nillable="true" maxOccurs="unbounded" type="xsd:string"/>
            </sequence>
        </complexType>
    </element>
    <element name="testString6">
        <complexType>
            <sequence>
                <element name="testValue" nillable="true" type="xsd:string"/>
            </sequence>
        </complexType>
    </element>
    <element name="testString7">
        <complexType>
            <sequence>
                <element name="testValue" maxOccurs="unbounded" type="xsd:string"/>
            </sequence>
        </complexType>
    </element>
    <element name="testString8">
        <complexType>
            <sequence>
                <element name="testValue" type="xsd:string"/>
            </sequence>
        </complexType>
    </element>

    <!-- generating elemens for custem types -->
    <element name="testBookInformation1">
        <complexType>
            <sequence>
                <element name="testValue" minOccurs="0" nillable="true" maxOccurs="unbounded"
                         type="tns:BookInformation"/>
            </sequence>
        </complexType>
    </element>
    <element name="testBookInformation2">
        <complexType>
            <sequence>
                <element name="testValue" minOccurs="0" nillable="true" type="tns:BookInformation"/>
            </sequence>
        </complexType>
    </element>
    <element name="testBookInformation3">
        <complexType>
            <sequence>
                <element name="testValue" minOccurs="0" maxOccurs="unbounded" type="tns:BookInformation"/>
            </sequence>
        </complexType>
    </element>
    <element name="testBookInformation4">
        <complexType>
            <sequence>
                <element name="testValue" minOccurs="0" type="tns:BookInformation"/>
            </sequence>
        </complexType>
    </element>
    <element name="testBookInformation5">
        <complexType>
            <sequence>
                <element name="testValue" nillable="true" maxOccurs="unbounded" type="tns:BookInformation"/>
            </sequence>
        </complexType>
    </element>
    <element name="testBookInformation6">
        <complexType>
            <sequence>
                <element name="testValue" nillable="true" type="tns:BookInformation"/>
            </sequence>
        </complexType>
    </element>
    <element name="testBookInformation7">
        <complexType>
            <sequence>
                <element name="testValue" maxOccurs="unbounded" type="tns:BookInformation"/>
            </sequence>
        </complexType>
    </element>
    <element name="testBookInformation8">
        <complexType>
            <sequence>
                <element name="testValue" type="tns:BookInformation"/>
            </sequence>
        </complexType>
    </element>


    <!-- generating elemens for any elements -->
    <element name="testAny1">
        <complexType>
            <sequence>
                <any minOccurs="0" maxOccurs="unbounded"/>
            </sequence>
        </complexType>
    </element>
    <element name="testAny2">
        <complexType>
            <sequence>
                <any minOccurs="0"/>
            </sequence>
        </complexType>
    </element>
    <element name="testAny3">
        <complexType>
            <sequence>
                <any maxOccurs="unbounded"/>
            </sequence>
        </complexType>
    </element>
    <element name="testAny4">
        <complexType>
            <sequence>
                <any/>
            </sequence>
        </complexType>
    </element>

    <!-- test string variables -->
    <element name="OuterTestString1" type="xsd:string" nillable="true"/>
    <element name="OuterTestString2" type="xsd:string"/>

    <!-- test primitive variables -->
    <element name="OuterTestInt1" type="xsd:int" nillable="true"/>
    <element name="OuterTestInt2" type="xsd:int"/>

    <!-- test xsd:any variables -->
    <element name="OuterTestAnyType1" type="xsd:anyType" nillable="true"/>
    <element name="OuterTestAnyType2" type="xsd:anyType"/>

    <!-- test xsd:any variables -->
    <element name="OuterTestBookInformation1" type="tns:BookInformation" nillable="true"/>
    <element name="OuterTestBookInformation2" type="tns:BookInformation"/>

    <!-- complext elements -->
    <element name="OuterTestComplex1" nillable="true">
        <complexType>
            <sequence>
                <element name="testValue" type="xsd:string"/>
            </sequence>
        </complexType>
    </element>
    <element name="OuterTestComplex2">
        <complexType>
            <sequence>
                <element name="testValue" type="xsd:string"/>
            </sequence>
        </complexType>
    </element>

    <complexType name="BookInformation">
        <sequence>
            <element name="author" minOccurs="0" maxOccurs="unbounded" type="string"/>
            <element name="title" type="string"/>
        </sequence>
        <attribute name="type" use="required" type="string"/>
        <attribute name="isbn" use="required" type="string"/>
    </complexType>
</schema>