<!--
  ~ 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.
  -->

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

    <!-- extension class -->
    <xsd:simpleType name="TestSimpleUnion">
        <xsd:union memberTypes="xsd:boolean xsd:QName"/>
    </xsd:simpleType>
    <xsd:element name="TestElement1" type="tns:TestParentType"/>
    <xsd:complexType name="TestParentType">
        <xsd:sequence>
            <xsd:element name="param1" type="xsd:QName"/>
            <xsd:element name="param2" type="xsd:string"/>
        </xsd:sequence>
    </xsd:complexType>
    <xsd:complexType name="TestChildType">
        <xsd:complexContent>
            <xsd:extension base="tns:TestParentType">
                <xsd:sequence>
                    <xsd:element name="param3" type="xsd:QName"/>
                    <xsd:element name="param4" type="xsd:string"/>
                    <xsd:element name="param5" type="tns:TestSimpleUnion"/>
                </xsd:sequence>
                <xsd:attribute name="attribute1" type="xsd:string"/>
                <xsd:attribute name="attribute2" type="xsd:QName"/>
            </xsd:extension>
        </xsd:complexContent>
    </xsd:complexType>
</xsd:schema>