<!--
  ~ 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="http://apache.org/axis2/schema/list"
        targetNamespace="http://apache.org/axis2/schema/list">

    <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>