<!--
  ~ 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 elementFormDefault="qualified"
        xmlns:xs="http://www.w3.org/2001/XMLSchema"
        xmlns:xsd="http://www.w3.org/2001/XMLSchema"
        xmlns="http://www.w3.org/2001/XMLSchema"
        xmlns:tns="http://apache.org/axis2/schema/choice"
        xmlns:test1="http://apache.org/axis2/schema/choice"
        targetNamespace="http://apache.org/axis2/schema/choice">

    <xs:element name="TestChoice" >
        <xs:complexType>
            <xs:choice>
                <xs:element name="choice1" type="xs:string"/>
                <xs:element name="choice2" type="xs:int"/>
            </xs:choice>
        </xs:complexType>
    </xs:element>

    <xsd:element name="myRootElem">
        <xsd:complexType>
            <xsd:sequence>
                <xsd:element name="Child1" type="xsd:int" ></xsd:element>
                <xsd:choice>
                    <xsd:element name="SomeChoice1" type="test1:SomeChoice1_Type" nillable="true" maxOccurs="unbounded"/>
                    <xsd:element name="SomeChoice2" type="test1:SomeChoice2_Type" nillable="true" maxOccurs="unbounded">
                    </xsd:element>
                </xsd:choice>
            </xsd:sequence>
        </xsd:complexType>
    </xsd:element>
    <xsd:complexType name="SomeChoice1_Type">
        <xsd:sequence>
            <xsd:element name="SomeChoice1Child1"
                         type="test1:SomeChoice1Child1_Type"/>
        </xsd:sequence>
        <xsd:attribute name="SomeChoice1Attr1" type="xsd:string" use="required"/>
        <xsd:attribute name="Version" type="xsd:string" use="required"/>
    </xsd:complexType>
    <xsd:complexType name="SomeChoice2_Type">
        <xsd:sequence>
            <xsd:element name="SomeChoice2Child1" type="xsd:string"
                         maxOccurs="unbounded"/>
            <xsd:element name="SomeChoice2Child2" type="xsd:int" minOccurs="0"/>
        </xsd:sequence>
        <xsd:attribute name="SomeChoice2Attr1" type="xsd:string" use="optional"/>
    </xsd:complexType>
    <xsd:complexType name="SomeChoice1Child1_Type">
    </xsd:complexType>

</schema>