<!-- Copyright 2004 The Apache Software Foundation

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

<!--
   This schema stands in for a schema for WSDL.

   It has none of the real structure of a WSDL except "imports" and
   the 2nd-level tag names.

   When compiling schemas within .wsdl files, we use this schema to load
   the WSDL files.  Of course, WSDL files are actually in the
   http://schemas.xmlsoap.org/wsdl/ namespace, but we use the
   LoadSubstituteNamespaces option in order to internally substitute
   the namespace below.
-->


<xs:schema
   xmlns:xs="http://www.w3.org/2001/XMLSchema"
   xmlns:tns="http://www.apache.org/internal/xmlbeans/wsdlsubst"
   targetNamespace="http://www.apache.org/internal/xmlbeans/wsdlsubst"
   elementFormDefault="qualified">

  <xs:element name="definitions">
    <xs:complexType>
      <xs:choice minOccurs="0" maxOccurs="unbounded">
        <xs:element name="import" type="tns:TImport"/>
        <xs:element name="types"/>               			
        <xs:element name="message"/>
        <xs:element name="binding"/>
        <xs:element name="portType"/>
        <xs:element name="service"/>
        <xs:any namespace="##other"/>
      </xs:choice>
      <xs:anyAttribute/>
    </xs:complexType>
  </xs:element>

  <xs:complexType name="TImport">
    <xs:attribute name="namespace" type="xs:anyURI" use="required"/>
    <xs:attribute name="location" type="xs:anyURI" use="required"/>
    <xs:anyAttribute namespace="##other"/>		
  </xs:complexType>

</xs:schema>
