The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.
<?xml version="1.0"?>
<!-- This file is used by t/SOAP/WSDL/Generator/XSD.t -->
<definitions name="Test"
    targetNamespace="urn:Test"
    xmlns:tns="urn:Test"
    xmlns:xsd="http://www.w3.org/2001/XMLSchema"
    xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
    xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
    xmlns:foobar="http://foo.bar"
    xmlns="http://schemas.xmlsoap.org/wsdl/"
xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/" xmlns:http="http://schemas.xmlsoap.org/wsdl/http/">
    <types>
        <xsd:schema targetNamespace="urn:Test" xmlns="urn:Test"
        elementFormDefault="qualified">
        <xsd:attribute name="TestAttribute" type="xsd:string"></xsd:attribute>

        <xsd:simpleType name="testSimpleTypeList">
            <xsd:annotation>
                <xsd:documentation>
                SimpleType: List with an integer
                </xsd:documentation>
            </xsd:annotation>
            <xsd:list itemType="xsd:int">
            </xsd:list>
        </xsd:simpleType>

        <xsd:simpleType name="testSimpleTypeListAtomic">
            <xsd:annotation>
                <xsd:documentation>
                SimpleType: List with an integer (length 2)
                </xsd:documentation>
            </xsd:annotation>
            <xsd:list>
                <xsd:simpleType>
                    <xsd:restriction base="xsd:int">
                        <xsd:totalDigits value="2" fixed="1"/>
                    </xsd:restriction>
                </xsd:simpleType>
            </xsd:list>
        </xsd:simpleType>

        <xsd:simpleType name="testRestriction">
            <xsd:annotation>
                <xsd:documentation>
                SimpleType: Integer between 1 and 9 (Exclusive constrains)
                </xsd:documentation>
            </xsd:annotation>
            <xsd:restriction base="xsd:int">
                <xsd:minExclusive value="0"/>
                <xsd:maxExclusive value="10"/>
            </xsd:restriction>
        </xsd:simpleType>

        <xsd:simpleType name="testRestrictionAtomicType">
            <xsd:annotation>
                <xsd:documentation>
                SimpleType: Integer between 1 and 9 (Exclusive constrains)
                </xsd:documentation>
            </xsd:annotation>
            <xsd:restriction>
                <xsd:simpleType>
                    <xsd:restriction base="xsd:int">
                        <xsd:minExclusive value="0"/>
                        <xsd:maxExclusive value="10"/>
                    </xsd:restriction>
                </xsd:simpleType>
            </xsd:restriction>
        </xsd:simpleType>

      <xsd:complexType name="testComplexTypeAll">
        <xsd:annotation>
          <xsd:documentation>ComplexType Test</xsd:documentation>
        </xsd:annotation>
        <xsd:all>
          <xsd:element name="Test1" type="xsd:string" maxOccurs="1"/>
          <xsd:element name="Test2" type="xsd:string" minOccurs="1" />
        </xsd:all>
      </xsd:complexType>

      <xsd:complexType name="testComplexTypeSimpleRestriction">
        <xsd:annotation>
          <xsd:documentation>ComplexType Test</xsd:documentation>
        </xsd:annotation>
        <xsd:simpleContent>
            <xsd:extension base="xsd:string">
                <xsd:attribute name="test" type="xsd:string"></xsd:attribute>
            </xsd:extension>
        </xsd:simpleContent>
      </xsd:complexType>


      <xsd:complexType name="testComplexTypeRestriction">
        <xsd:annotation>
          <xsd:documentation>ComplexType Test</xsd:documentation>
        </xsd:annotation>
        <xsd:complexContent>
        <xsd:restriction base="tns:testComplexTypeAll">
            <xsd:all>
                <xsd:element name="Test1" type="xsd:string" minOccurs="1"/>
                <xsd:element name="Test2" type="xsd:string" minOccurs="1" />
            </xsd:all>
        </xsd:restriction>
        </xsd:complexContent>
      </xsd:complexType>

        <xsd:complexType name="testComplexTypeExtension">
            <xsd:annotation>
                  <xsd:documentation>complexType extension test</xsd:documentation>
            </xsd:annotation>
            <xsd:complexContent>
                <xsd:extension base="tns:testComplexTypeSequence">
                    <xsd:sequence>
                        <xsd:element name="Test3" type="xsd:string" minOccurs="1"/>
                    </xsd:sequence>
                </xsd:extension>
            </xsd:complexContent>
        </xsd:complexType>

      <xsd:complexType name="testComplexNestedExtension">
            <xsd:annotation>
                  <xsd:documentation>complexType extension test</xsd:documentation>
            </xsd:annotation>
            <xsd:complexContent>
                <xsd:extension base="tns:testComplexTypeExtension">
                    <xsd:sequence>
                        <xsd:element name="Test4" type="xsd:string" minOccurs="1"/>
                    </xsd:sequence>
                </xsd:extension>
            </xsd:complexContent>
        </xsd:complexType>

        <xsd:complexType name="testComplexTypeChoice">
            <xsd:annotation>
                <xsd:documentation>ComplexType choice test</xsd:documentation>
            </xsd:annotation>
            <xsd:choice>
                <xsd:element name="Test1" type="xsd:string" minOccurs="1"/>
                <xsd:element name="Test2" type="xsd:string" maxOccurs="1"/>
            </xsd:choice>
        </xsd:complexType>

        <xsd:complexType name="testComplexTypeSequence">
            <xsd:annotation>
                <xsd:documentation>ComplexType Test</xsd:documentation>
            </xsd:annotation>
            <xsd:sequence>
                <xsd:element name="Test1" type="xsd:string" minOccurs="1"/>
                <xsd:element name="Test2" type="xsd:string" maxOccurs="1"/>
            </xsd:sequence>
        </xsd:complexType>

        <xsd:complexType name="testComplexTypeSequenceWithAttribute">
            <xsd:annotation>
                <xsd:documentation>ComplexType Test</xsd:documentation>
            </xsd:annotation>
            <xsd:sequence>
                <xsd:element name="Test1" type="xsd:string" minOccurs="1"/>
                <xsd:element name="Test2" type="xsd:string" maxOccurs="1"/>
            </xsd:sequence>
            <xsd:attribute name="testAttr" type="xsd:string" use="optional">
                <xsd:annotation>
                    <xsd:documentation>Test Attribute good for nothing</xsd:documentation>
                </xsd:annotation>
            </xsd:attribute>
        </xsd:complexType>

        <xsd:complexType name="testComplexTypeSequence2">
            <xsd:annotation>
                <xsd:documentation>ComplexType test</xsd:documentation>
            </xsd:annotation>
            <xsd:sequence>
                <xsd:element name="Test1" type="xsd:string" minOccurs="1"/>
                <xsd:element name="Test2" type="tns:testComplexTypeSequence" maxOccurs="1"/>
            </xsd:sequence>
        </xsd:complexType>

        <xsd:complexType name="testSimpleContentExtension">
            <xsd:simpleContent>
                <xsd:extension base="xsd:string">
                    <xsd:attribute name="testAttr" type="xsd:string" use="optional"/>
                </xsd:extension>
            </xsd:simpleContent>
        </xsd:complexType>

        <xsd:complexType name="testEmptyComplexExtension">
            <xsd:complexContent>
                <xsd:extension base="tns:testComplexTypeSequence" />
            </xsd:complexContent>
        </xsd:complexType>

        <xsd:complexType name="testEmptySimpleExtension">
            <xsd:simpleContent>
                <xsd:extension base="xsd:string" />
            </xsd:simpleContent>
        </xsd:complexType>

      <xsd:element name="testReferencesExtension">
        <xsd:complexType>
          <xsd:sequence>
              <xsd:element minOccurs="0" maxOccurs="1" name="data" type="tns:testReferencedExtension" />
              <xsd:element minOccurs="1" maxOccurs="1" name="flags" type="xsd:int" />
          </xsd:sequence>
          </xsd:complexType>
          </xsd:element>
          <xsd:complexType name="testReferencedExtension">
              <xsd:complexContent mixed="false">
                  <xsd:extension base="tns:testExtensionBase">
                      <xsd:sequence>
                          <xsd:element minOccurs="0" maxOccurs="1"
                              name="test1" type="xsd:int" />
                          <xsd:element minOccurs="0" maxOccurs="1"
                              name="test2" type="xsd:string" />
                          <xsd:element minOccurs="0" maxOccurs="1" name="test3"
                              type="xsd:string" />
                          <xsd:element minOccurs="0" maxOccurs="1"
                              name="test4" type="xsd:string" />
                          <xsd:element minOccurs="0" maxOccurs="1"
                              name="test5" type="xsd:boolean" />
                          <xsd:element minOccurs="0" maxOccurs="1" name="test6"
                              type="xsd:string" />
                          <xsd:element minOccurs="0" maxOccurs="1" name="test7"
                              type="xsd:int" />
                      </xsd:sequence>
                  </xsd:extension>
              </xsd:complexContent>
          </xsd:complexType>
          <xsd:complexType name="testExtensionBase" abstract="true">
              <xsd:sequence>
                  <xsd:element minOccurs="0" maxOccurs="1" name="test"
                      type="xsd:string" />
              </xsd:sequence>
          </xsd:complexType>


        <xsd:element name="testElementNestedExtension" type="tns:testComplexNestedExtension" />
        <xsd:element name="testElementString" type="xsd:string" />
        <xsd:element name="testElementInt" type="xsd:int" />
        <!-- unprefixed type - test wheter xmlns from schema is propagated -->
        <xsd:element name="testElementSimpleTypeList" type="testSimpleTypeList"/>
        <xsd:element name="testElementComplexTypeAll" type="tns:testComplexTypeAll"/>
        <xsd:element name="testOutputElementComplexTypeSequence" type="tns:testComplexTypeSequence"/>
        <xsd:element name="testElementComplexTypeSequenceWithAttribute" type="tns:testComplexTypeSequenceWithAttribute"/>
        <xsd:element name="testElementAtomicSimpleTypeRestriction">
            <xsd:simpleType>
                <xsd:annotation>
                    <xsd:documentation> SimpleType: Integer between 1 and 9
                        (Inclusive constraints) </xsd:documentation>
                </xsd:annotation>
                <xsd:restriction base="xsd:int">
                    <xsd:minInclusive>1</xsd:minInclusive>
                    <xsd:maxInclusive>9</xsd:maxInclusive>
                </xsd:restriction>
            </xsd:simpleType>
        </xsd:element>

        <xsd:element name="testElementAtomicComplexTypeAll">
            <xsd:complexType>
                <xsd:annotation>
                    <xsd:documentation> SimpleType: Integer between 1 and 9
                        (Inclusive constraints) </xsd:documentation>
                </xsd:annotation>
                <xsd:all>
                    <xsd:element name="test1" type="xsd:int"/>
                    <xsd:element name="test2" type="xsd:string"/>
                </xsd:all>
            </xsd:complexType>
        </xsd:element>

        <xsd:element name="Header" type="tns:testComplexTypeSequence" nillable="false"/>
        <xsd:element name="testHeader" type="tns:testComplexTypeSequence" nillable="0"/>
        <xsd:element name="testChoice" type="tns:testComplexTypeChoice"/>


        <xsd:complexType name="testComplexTypeElementAtomicSimpleType">
          <xsd:sequence>
            <xsd:element name="testString" type="xsd:string" minOccurs="0"/>
            <xsd:element name="testAtomicSimpleTypeElement" minOccurs="0">
              <xsd:simpleType>
                <xsd:restriction base="xsd:decimal">
                  <xsd:minInclusive value="0"/>
                </xsd:restriction>
              </xsd:simpleType>
            </xsd:element>
            <xsd:element name="testAtomicSimpleTypeElement2" minOccurs="0">
              <xsd:simpleType>
                <xsd:restriction base="xsd:decimal">
                  <xsd:minInclusive value="0"/>
                </xsd:restriction>
              </xsd:simpleType>
            </xsd:element>
          </xsd:sequence>
        </xsd:complexType>

        <xsd:complexType name="elementRefComplexType">
            <xsd:sequence>
                <xsd:element ref="testElementString"/>
            </xsd:sequence>
        </xsd:complexType>

        <xsd:element name="testElementEmptyComplex" nillable="true">
            <xsd:complexType>
                <xsd:sequence/>
            </xsd:complexType>
        </xsd:element>
        <xsd:complexType name="emptyComplexType">
            <xsd:sequence></xsd:sequence>
        </xsd:complexType>

        <xsd:element name="testElementCompletelyEmptyComplex" nillable="1">
            <xsd:complexType>
            </xsd:complexType>
        </xsd:element>

        <xsd:complexType name="abstractComplexType" abstract="true">
        </xsd:complexType>

        <xsd:complexType name="intermediateComplexType">
            <xsd:complexContent>
            <xsd:extension base="abstractComplexType">
                <xsd:sequence>
                    <xsd:element name="Name" type="xsd:string"/>
                    <xsd:element name="GivenName" type="xsd:string"/>
                </xsd:sequence>
            </xsd:extension>
            </xsd:complexContent>
        </xsd:complexType>

        <xsd:complexType name="finalComplexType">
            <xsd:complexContent>
                <xsd:extension base="intermediateComplexType">
                </xsd:extension>
            </xsd:complexContent>
        </xsd:complexType>

        <xsd:complexType name="completelyEmptyComplexType">
        </xsd:complexType>

        <xsd:element name="testRef" type="elementRefComplexType"/>
        <xsd:element name="testAtomicRef">
            <xsd:complexType>
                <xsd:all>
                    <xsd:element ref="in"/>
                    <xsd:element ref="tns:out"/>
                </xsd:all>
            </xsd:complexType>
        </xsd:element>
        <xsd:element name="testComplexTypeRestriction" type="testComplexTypeRestriction"/>
        <xsd:element name="testComplexTypeSimpleRestriction" type="testComplexTypeSimpleRestriction"/>
        <xsd:element name="in" type="xsd:string"></xsd:element>
        <xsd:element name="out" type="xsd:string"></xsd:element>

        </xsd:schema>
    </types>
    <message name="testChoice">
        <part name="parameters" element="tns:testChoice"/>
    </message>
    <message name="testRequest">
        <part name="testAll" element="tns:testElementString"/>
    </message>
    <message name="testResponse">
        <part name="testAll" element="tns:testElementEmptyComplex"/>
    </message>
    <message name="testMultiPartWarning">
        <part name="testAll" element="tns:testElementString"/>
        <part name="parameters" element="tns:testChoice"/>
    </message>
    <message name="testHeaderRequest">
        <part name="testBody" element="tns:testHeader"/>
        <part name="testHeader" element="tns:Header"/>
    </message>
    <message name="testHeaderResponse">
        <part name="testAll" element="tns:testElementString"/>
    </message>

    <message name="testEmptyComplex">
        <part name="testOutput"
            element="tns:testElementNestedExtension" />
    </message>

    <message name="testAtomicSimple">
        <part name="test"
            element="tns:testElementAtomicSimpleTypeRestriction" />
    </message>

    <message name="testRef">
        <part name="test" element="tns:testRef"/>
    </message>

    <message name="testAtomicRef">
        <part name="test" element="tns:testAtomicRef"/>
    </message>

    <message name="testRestriction">
        <wsdl:part name="test" element="tns:testComplexTypeRestriction"></wsdl:part>
    </message>

    <message name="testSimpleRestriction">
        <wsdl:part name="test" element="tns:testComplexTypeSimpleRestriction"></wsdl:part>
    </message>

    <wsdl:message name="Request">
        <wsdl:part name="Request" element="tns:in"></wsdl:part>
    </wsdl:message>
    <wsdl:message name="Response">
        <wsdl:part name="Response" element="tns:out"></wsdl:part>
    </wsdl:message>


    <portType name="testPort">
        <operation name="test">
            <documentation>test method</documentation>
            <input message="tns:testRequest"/>
            <output message="tns:testResponse"/>
        </operation>
        <operation name="testHeader">
            <documentation>Header test method</documentation>
            <input message="tns:testHeaderRequest"/>
            <output message="tns:testHeaderResponse"/>
        </operation>
        <operation name="testChoice">
            <documentation>choice/restriction test method</documentation>
            <input message="tns:testChoice"/>
            <output message="tns:testRestriction"/>
        </operation>
        <operation name="testMultiPartWarning">
            <documentation>multipart warning test method</documentation>
            <input message="tns:testMultiPartWarning"/>
            <output message="tns:testMultiPartWarning"/>
        </operation>

        <operation name="testEmptyComplex">
            <documentation>empty complex type test method</documentation>
            <input message="tns:testEmptyComplex"/>
            <output message="tns:testAtomicSimple"/>
        </operation>

        <operation name="testRestriction">
            <documentation>restriction complex type test method</documentation>
            <input message="tns:testEmptyComplex"/>
            <output message="tns:testSimpleRestriction"/>
        </operation>

        <operation name="testRef">
                <input message="tns:testRef"/>
                <output message="tns:testAtomicRef"/>
        </operation>
    </portType>

    <binding type="tns:testPort" name="testBinding">
        <soap:binding style="document"
            transport="http://schemas.xmlsoap.org/soap/http" />
        <operation name="testChoice">
            <soap:operation soapAction="testChoice" style="document" />
            <input>
                <soap:body use="literal" />
            </input>
            <output>
                <soap:body use="literal" />
            </output>
        </operation>

        <operation name="test">
            <soap:operation soapAction="test" style="document" />
            <input>
                <soap:body use="literal" />
            </input>
            <output>
                <soap:body use="literal" />
            </output>
        </operation>
        <operation name="testHeader">
            <soap:operation soapAction="testHeader" />
            <input>
                <soap:body use="literal" parts="testBody" />
                <soap:header use="literal" part="testHeader"
                    message="tns:testHeaderRequest" />
            </input>
            <output>
                <soap:body use="literal" />
            </output>
        </operation>
        <operation name="testMultiPartWarning">
            <soap:operation soapAction="testHeader" />
            <input>
                <soap:body use="literal" />
            </input>
            <output>
                <soap:body use="literal" />
            </output>
        </operation>
        <operation name="testRestriction">
            <soap:operation soapAction="testRestriction" />
            <input>
                <soap:body use="literal" />
            </input>
            <output>
                <soap:body use="literal" />
            </output>
        </operation>
        <operation name="testRef">
            <soap:operation soapAction="testRef" />
            <input>
                <soap:body use="literal" />
            </input>
            <output>
                <soap:body use="literal" />
            </output>
        </operation>

        <wsdl:operation name="testEmptyComplex" foobar:Action="testEmptyComplex">
            <soap:operation soapAction="urn:Test/testEmptyComplex" />
            <wsdl:input>
                <soap:body use="literal" />
            </wsdl:input>
            <wsdl:output>
                <soap:body use="literal" />
            </wsdl:output>
        </wsdl:operation>
    </binding>
    <wsdl:binding name="HTTPBinding" type="tns:testPort">
        <http:binding verb="GET" />
        <wsdl:operation name="test">
            <http:operation location="/test" />
            <wsdl:input>
                <http:urlEncoded />
            </wsdl:input>
            <wsdl:output></wsdl:output>
        </wsdl:operation>
        <wsdl:operation name="testHeader">
            <http:operation location="/testHeader" />
            <wsdl:input>
                <http:urlEncoded />
            </wsdl:input>
            <wsdl:output></wsdl:output>
        </wsdl:operation>
        <wsdl:operation name="testChoice">
            <http:operation location="/testChoice" />
            <wsdl:input>
                <http:urlEncoded />
            </wsdl:input>
            <wsdl:output></wsdl:output>
        </wsdl:operation>
        <wsdl:operation name="testMultiPartWarning">
            <http:operation location="/testMultiPartWarning" />
            <wsdl:input>
                <http:urlEncoded />
            </wsdl:input>
            <wsdl:output></wsdl:output>
        </wsdl:operation>
        <wsdl:operation name="testRef">
            <http:operation location="/testEmptyComplex" />
            <wsdl:input>
                <http:urlEncoded />
            </wsdl:input>
            <wsdl:output></wsdl:output>
        </wsdl:operation>
        <wsdl:operation name="testEmptyComplex">
            <http:operation location="/testEmptyComplex" />
            <wsdl:input>
                <http:urlEncoded />
            </wsdl:input>
            <wsdl:output>
            </wsdl:output>
        </wsdl:operation>
    </wsdl:binding>
    <service name="testService">
        <port name="testPort" binding="tns:testBinding">
            <soap:address location="http://127.0.0.1/testPort" />
        </port>
        <wsdl:port name="HTTPPort" binding="tns:HTTPBinding">
            <http:address location="http://www.example.org/"></http:address>
        </wsdl:port>
    </service>
</definitions>