<!--
  ~ 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="http://www.w3.org/2001/XMLSchema"
        xmlns:tns="org.apache.axis2.test"
        targetNamespace="org.apache.axis2.test">

    <xs:simpleType name="TestListQName">
        <xs:list itemType="xs:QName"></xs:list>
    </xs:simpleType>

    <xs:element name="TestListQNameElement" type="tns:TestListQName"/>

    <xs:simpleType name="TestListString">
        <xs:list itemType="xs:string"></xs:list>
    </xs:simpleType>

    <xs:element name="TestListStringElement" type="tns:TestListString"/>

    <xs:simpleType name="TestString">
        <xs:restriction base="xs:string">
            <xs:pattern value="[A-z]*"></xs:pattern>
        </xs:restriction>
    </xs:simpleType>

    <xs:simpleType name="TestListOurs">
        <xs:list itemType="tns:TestString"/>
    </xs:simpleType>

    <xs:element name="TestListOursElement" type="tns:TestListOurs"/>

    <xs:simpleType name="SuperTestListString">
        <xs:restriction base="tns:TestListString"/>
    </xs:simpleType>

    <xs:simpleType name="TestListInt">
        <xs:list itemType="xs:int"></xs:list>
    </xs:simpleType>

    <xs:element name="SuperTestListStringElement" type="tns:SuperTestListString"/>

    <xs:simpleType name="InnerListSimpleType">
        <xs:list>
            <xs:simpleType>
                <xs:restriction base="xs:string">
                    <xs:enumeration value="Exist"/>
                    <xs:enumeration value="Access"/>
                </xs:restriction>
            </xs:simpleType>
        </xs:list>
    </xs:simpleType>

    <xs:element name="TestInnerListSimpleType" type="tns:InnerListSimpleType"/>

</schema>