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

    <xs:complexType name="type">
        <xs:sequence>
            <xs:element name="first" type="xs:string"/>
            <xs:element name="middle" type="xs:string"/>
            <xs:element name="last" type="xs:string"/>
        </xs:sequence>
    </xs:complexType>
    <xs:simpleType name="simpleType">
        <xs:restriction base="xs:string">
            <xs:pattern value="[A-Z]*"></xs:pattern>
        </xs:restriction>
    </xs:simpleType>
    <xs:simpleType name="baseType">
        <xs:restriction base="xs:string">
            <xs:enumeration value="s1"></xs:enumeration>
            <xs:enumeration value="s2"></xs:enumeration>
            <xs:enumeration value="s3"></xs:enumeration>
            <xs:enumeration value="s4"></xs:enumeration>
        </xs:restriction>
    </xs:simpleType>
    <xs:element name="fullName">
        <xs:complexType>
            <xs:simpleContent>
                <xs:extension base="tns:type">
                    <xs:attribute name="language" type="xs:language"/>
                    <xs:attribute name="attribute1" type="tns:baseType"/>
                    <xs:attribute name="attribute2" type="tns:simpleType"/>
                </xs:extension>
            </xs:simpleContent>
        </xs:complexType>
    </xs:element>
    <xs:complexType name="ExtendedComplexType">
        <xs:complexContent>
            <xs:extension base="tns:type">
                <xs:sequence>
                    <xs:element name="parentElement1" type="xs:string"></xs:element>
                    <xs:element name="parentElement2" type="xs:string"></xs:element>
                </xs:sequence>
            </xs:extension>
        </xs:complexContent>
    </xs:complexType>
    <xs:element name="TestComplexElement" type="tns:ExtendedComplexType">
    </xs:element>

    <xs:complexType name="P2apiAgPatAppt">
        <xs:complexContent>
            <xs:extension base="tns:P2apiDataRptGrp">
                <xs:sequence>
                    <xs:element minOccurs="0" name="aG_MAX_APPT_DETL_ROW" type="xs:int"/>
                    <xs:element minOccurs="0" name="apptLst" nillable="true" type="xs:anyType"/>
                </xs:sequence>
            </xs:extension>
        </xs:complexContent>
    </xs:complexType>
    <xs:complexType name="P2apiDataRptGrp">
        <xs:sequence>
            <xs:element minOccurs="0" name="sORT_ASCENDING" type="xs:int"/>
            <xs:element minOccurs="0" name="sORT_DESCENDING" type="xs:int"/>
            <xs:element minOccurs="0" name="SORT_ASCENDING" type="xs:int"/>
            <xs:element minOccurs="0" name="SORT_DESCENDING" type="xs:int"/>
        </xs:sequence>
    </xs:complexType>

    <xs:element name="SimpleAmmountElement" type="tns:SimpleAmmount" />
    <xs:complexType name="SimpleAmmount">
        <xs:simpleContent>
            <xs:extension base="xs:string">
                <xs:attribute name="currency" type="xs:string"
                    use="required" />
            </xs:extension>
        </xs:simpleContent>
    </xs:complexType>

    <!-- complexType having simpleContent extension -->
    <xs:element name="PaymentAmountElement" type="tns:PaymentAmount" />
    <xs:complexType name="PaymentAmount">
        <xs:simpleContent>
            <xs:extension base="tns:Amount" />
        </xs:simpleContent>
    </xs:complexType>
    <xs:complexType name="Amount">
        <xs:simpleContent>
            <xs:extension base="xs:string">
                <xs:attribute name="currency" type="xs:string"
                    use="required" />
            </xs:extension>
        </xs:simpleContent>
    </xs:complexType>

    <!-- complexType having complexContent extension -->
    <xs:element name="fullpersoninfoElement" type="tns:fullpersoninfo" />
    <xs:complexType name="fullpersoninfo">
        <xs:complexContent>
            <xs:extension base="tns:personinfo">
                <xs:sequence>
                    <xs:element name="address" type="xs:string" />
                    <xs:element name="city" type="xs:string" />
                    <xs:element name="country" type="xs:string" />
                </xs:sequence>
            </xs:extension>
        </xs:complexContent>
    </xs:complexType>
    <xs:complexType name="personinfo">
        <xs:sequence>
            <xs:element name="firstname" type="xs:string" />
            <xs:element name="lastname" type="xs:string" />
        </xs:sequence>
    </xs:complexType>

    <xs:simpleType name="ReproStringType">
        <xs:restriction base="xs:string">
            <xs:maxLength value="1024" />
        </xs:restriction>
    </xs:simpleType>
    <xs:element name="ReproStringTypeElement">
        <xs:complexType>
            <xs:simpleContent>
                <xs:extension base="tns:ReproStringType">
                    <xs:attribute name="lang" type="xs:language">
                    </xs:attribute>
                </xs:extension>
            </xs:simpleContent>
        </xs:complexType>
    </xs:element>

</schema>