<?xml version="1.0" encoding="utf-8"?>
<xs:schema 
  targetNamespace="http://www.xmlmodeling.com/schemas/uddi" 
  elementFormDefault="qualified" attributeFormDefault="unqualified" 
  xmlns:xs="http://www.w3.org/2000/10/XMLSchema" 
  xmlns:xsd="http://www.w3.org/2000/10/XMLSchema" 
  xmlns:uddi="http://www.xmlmodeling.com/schemas/uddi"
  xmlns:msg="http://www.xmlmodeling.com/schemas/uddi"
  xmlns:xml="http://www.w3.org/XML/1998/namespace">

  <xs:import namespace="http://www.w3.org/XML/1998/namespace"
             schemaLocation="xml.xsd"/>
             
        <!-- schemaLocation="http://www.w3.org/XML/2000/10/xml.xsd" -->
                    
<!-- Disclaimer: this is not the official UDDI schema.  It is intended
     only for educational purposes as a test of UML to Schema mapping.
     The UDDI target namespace was modified to reflect this difference.
     
     Nothing below this line was modified from the schema that was
     automatically generated from the UML model of UDDI.  Only the
     namespace declarations were edited, due to the inability to
     add these declarations dynamically in XSLT.
     
     This XML Schema was generated by Dave Carlson at Ontogenics Corp.
     See http://XMLModeling.com for additional information.
-->

<!-- _______________________________________________________________ -->
<!--                                                                 -->
<!-- PACKAGE: <<XSDschema>> UDDI  -->
<!-- _______________________________________________________________ -->


<!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
<!-- CLASS: AccessPoint  -->
<!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->

   <xs:element name="AccessPoint" type="uddi:AccessPoint"/>
   <xs:complexType name="AccessPoint">
      <xs:annotation>
         <xs:documentation>Present when a service is directly accessible at a particular address (e.g. URL, etc.). Mutually exclusive with hostingRedirector.</xs:documentation>
      </xs:annotation>
      <xs:simpleContent>
         <xs:extension base="xsd:string">
            <xs:attributeGroup ref="uddi:AccessPoint.att"/>
         </xs:extension>
      </xs:simpleContent>
   </xs:complexType>
   <xs:attributeGroup name="AccessPoint.att">
      <xs:attribute name="URLType" type="uddi:URLType" use="required"/>
   </xs:attributeGroup>

<!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
<!-- CLASS: <<XSDcomplexType>> BindingTemplate  -->
<!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->

   <xs:element name="BindingTemplate" type="uddi:BindingTemplate"/>
   <xs:complexType name="BindingTemplate">
      <xs:annotation>
         <xs:documentation>Describes an instance of a web service in technical terms.</xs:documentation>
      </xs:annotation>
      <xs:sequence>
         <xs:element name="description" type="uddi:StringI18N" minOccurs="0" maxOccurs="unbounded"/>
         <xs:choice minOccurs="0" maxOccurs="unbounded">
            <xs:element ref="uddi:AccessPoint" minOccurs="0" maxOccurs="1"/>
            <xs:element ref="uddi:HostingRedirector" minOccurs="0" maxOccurs="1"/>
         </xs:choice>
         <xs:element name="tModelInstanceDetails" minOccurs="0" maxOccurs="1">
            <xs:complexType>
               <xs:sequence>
                  <xs:element ref="uddi:TModelInstanceInfo" minOccurs="0" maxOccurs="unbounded"/>
               </xs:sequence>
            </xs:complexType>
         </xs:element>
      </xs:sequence>
      <xs:attributeGroup ref="uddi:BindingTemplate.att"/>
   </xs:complexType>
   <xs:attributeGroup name="BindingTemplate.att">
      <xs:attribute name="bindingKey" type="xsd:string" use="required"/>
      <xs:attribute name="serviceKey" type="xs:string"/>
   </xs:attributeGroup>

<!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
<!-- CLASS: BusinessEntity  -->
<!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->

   <xs:element name="BusinessEntity" type="uddi:BusinessEntity"/>
   <xs:complexType name="BusinessEntity">
      <xs:annotation>
         <xs:documentation>Describes an instance of a business or business unit.</xs:documentation>
      </xs:annotation>
      <xs:sequence>
         <xs:element name="discoveryURLs" minOccurs="0" maxOccurs="1">
            <xs:complexType>
               <xs:sequence>
                  <xs:element ref="uddi:DiscoveryURL" minOccurs="0" maxOccurs="unbounded"/>
               </xs:sequence>
            </xs:complexType>
         </xs:element>
         <xs:element name="name" type="xsd:string"/>
         <xs:element name="description" type="uddi:StringI18N" minOccurs="0" maxOccurs="unbounded"/>
         <xs:element name="contacts" minOccurs="0" maxOccurs="1">
            <xs:complexType>
               <xs:sequence>
                  <xs:element ref="uddi:Contact" minOccurs="0" maxOccurs="unbounded"/>
               </xs:sequence>
            </xs:complexType>
         </xs:element>
         <xs:element name="businessServices" minOccurs="0" maxOccurs="1">
            <xs:complexType>
               <xs:sequence>
                  <xs:element ref="uddi:BusinessService" minOccurs="0" maxOccurs="unbounded"/>
               </xs:sequence>
            </xs:complexType>
         </xs:element>
         <xs:element ref="uddi:IdentifierBag" minOccurs="0" maxOccurs="1"/>
         <xs:element ref="uddi:CategoryBag" minOccurs="0" maxOccurs="1"/>
      </xs:sequence>
      <xs:attributeGroup ref="uddi:BusinessEntity.att"/>
   </xs:complexType>
   <xs:attributeGroup name="BusinessEntity.att">
      <xs:attribute name="businessKey" type="xsd:string" use="required"/>
      <xs:attribute name="operator" type="xsd:string" use="required"/>
      <xs:attribute name="authorizedName" type="xsd:string" use="required"/>
   </xs:attributeGroup>

<!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
<!-- CLASS: BusinessService  -->
<!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->

   <xs:element name="BusinessService" type="uddi:BusinessService"/>
   <xs:complexType name="BusinessService">
      <xs:annotation>
         <xs:documentation>Describes a logical service type in business terms.</xs:documentation>
      </xs:annotation>
      <xs:sequence>
         <xs:element name="name" type="xsd:string"/>
         <xs:element name="description" type="uddi:StringI18N" minOccurs="0" maxOccurs="unbounded"/>
         <xs:element name="bindingTemplates" minOccurs="0" maxOccurs="1">
            <xs:complexType>
               <xs:sequence>
                  <xs:element ref="uddi:BindingTemplate" minOccurs="0" maxOccurs="unbounded"/>
               </xs:sequence>
            </xs:complexType>
         </xs:element>
         <xs:element ref="uddi:CategoryBag" minOccurs="0" maxOccurs="1"/>
      </xs:sequence>
      <xs:attributeGroup ref="uddi:BusinessService.att"/>
   </xs:complexType>
   <xs:attributeGroup name="BusinessService.att">
      <xs:attribute name="serviceKey" type="xsd:string" use="required"/>
      <xs:attribute name="businessKey" type="xs:string"/>
   </xs:attributeGroup>

<!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
<!-- CLASS: CategoryBag  -->
<!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->

   <xs:element name="CategoryBag" type="uddi:CategoryBag"/>
   <xs:complexType name="CategoryBag">
      <xs:sequence>
         <xs:element name="keyedReference" type="uddi:KeyedReference" minOccurs="0" maxOccurs="unbounded"/>
      </xs:sequence>
      <xs:attributeGroup ref="uddi:CategoryBag.att"/>
   </xs:complexType>
   <xs:attributeGroup name="CategoryBag.att"/>

<!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
<!-- CLASS: DiscoveryURL  -->
<!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->

   <xs:element name="DiscoveryURL" type="uddi:DiscoveryURL"/>
   <xs:complexType name="DiscoveryURL">
      <xs:simpleContent>
         <xs:extension base="xsd:uriReference">
            <xs:attributeGroup ref="uddi:DiscoveryURL.att"/>
         </xs:extension>
      </xs:simpleContent>
   </xs:complexType>
   <xs:attributeGroup name="DiscoveryURL.att">
      <xs:attribute name="useType" type="xsd:string" use="required"/>
   </xs:attributeGroup>

<!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
<!-- CLASS: HostingRedirector  -->
<!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->

   <xs:element name="HostingRedirector" type="uddi:HostingRedirector"/>
   <xs:complexType name="HostingRedirector">
      <xs:annotation>
         <xs:documentation>Present only when the service is provisioned via remote hosting, load balancing, etc. Mutually exclusive with accessPoint.</xs:documentation>
      </xs:annotation>
      <xs:attributeGroup ref="uddi:HostingRedirector.att"/>
   </xs:complexType>
   <xs:attributeGroup name="HostingRedirector.att">
      <xs:attribute name="bindingKey" type="xsd:string" use="required"/>
   </xs:attributeGroup>

<!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
<!-- CLASS: IdentifierBag  -->
<!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->

   <xs:element name="IdentifierBag" type="uddi:IdentifierBag"/>
   <xs:complexType name="IdentifierBag">
      <xs:sequence>
         <xs:element name="keyedReference" type="uddi:KeyedReference" minOccurs="0" maxOccurs="unbounded"/>
      </xs:sequence>
      <xs:attributeGroup ref="uddi:IdentifierBag.att"/>
   </xs:complexType>
   <xs:attributeGroup name="IdentifierBag.att"/>

<!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
<!-- CLASS: InstanceDetails  -->
<!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->

   <xs:element name="InstanceDetails" type="uddi:InstanceDetails"/>
   <xs:complexType name="InstanceDetails">
      <xs:sequence>
         <xs:element name="description" type="uddi:StringI18N" minOccurs="0" maxOccurs="unbounded"/>
         <xs:element name="overviewDoc" type="uddi:OverviewDoc" minOccurs="0" maxOccurs="1"/>
         <xs:element name="instanceParms" type="xsd:uriReference" minOccurs="0" maxOccurs="1"/>
      </xs:sequence>
      <xs:attributeGroup ref="uddi:InstanceDetails.att"/>
   </xs:complexType>
   <xs:attributeGroup name="InstanceDetails.att"/>

<!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
<!-- CLASS: KeyedReference  -->
<!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->

   <xs:element name="KeyedReference" type="uddi:KeyedReference"/>
   <xs:complexType name="KeyedReference">
      <xs:attributeGroup ref="uddi:KeyedReference.att"/>
   </xs:complexType>
   <xs:attributeGroup name="KeyedReference.att">
      <xs:attribute name="tModelKey" type="xsd:string" use="required"/>
      <xs:attribute name="keyName" type="xsd:string" use="required"/>
      <xs:attribute name="keyValue" type="xsd:string" use="required"/>
   </xs:attributeGroup>

<!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
<!-- CLASS: OverviewDoc  -->
<!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->

   <xs:element name="OverviewDoc" type="uddi:OverviewDoc"/>
   <xs:complexType name="OverviewDoc">
      <xs:sequence>
         <xs:element name="description" type="uddi:StringI18N" minOccurs="0" maxOccurs="unbounded"/>
         <xs:element name="overviewURL" type="xsd:uriReference" minOccurs="0" maxOccurs="1"/>
      </xs:sequence>
      <xs:attributeGroup ref="uddi:OverviewDoc.att"/>
   </xs:complexType>
   <xs:attributeGroup name="OverviewDoc.att"/>

<!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
<!-- CLASS: StringI18N  -->
<!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->

   <xs:element name="StringI18N" type="uddi:StringI18N"/>
   <xs:complexType name="StringI18N">
      <xs:simpleContent>
         <xs:extension base="xsd:string">
            <xs:attributeGroup ref="uddi:StringI18N.att"/>
         </xs:extension>
      </xs:simpleContent>
   </xs:complexType>
   <xs:attributeGroup name="StringI18N.att">
      <xs:attribute ref="xml:lang"/>
   </xs:attributeGroup>

<!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
<!-- CLASS: TModel  -->
<!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->

   <xs:element name="TModel" type="uddi:TModel"/>
   <xs:complexType name="TModel">
      <xs:sequence>
         <xs:element name="name" type="xsd:string"/>
         <xs:element name="description" type="uddi:StringI18N" minOccurs="0" maxOccurs="unbounded"/>
         <xs:element name="overviewDoc" type="uddi:OverviewDoc" minOccurs="0" maxOccurs="1"/>
         <xs:element ref="uddi:IdentifierBag" minOccurs="0" maxOccurs="1"/>
         <xs:element ref="uddi:CategoryBag" minOccurs="0" maxOccurs="1"/>
      </xs:sequence>
      <xs:attributeGroup ref="uddi:TModel.att"/>
   </xs:complexType>
   <xs:attributeGroup name="TModel.att">
      <xs:attribute name="tModelKey" type="xsd:string" use="required"/>
   </xs:attributeGroup>

<!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
<!-- CLASS: TModelBag  -->
<!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->

   <xs:element name="TModelBag" type="uddi:TModelBag"/>
   <xs:complexType name="TModelBag">
      <xs:sequence>
         <xs:element name="tModelKey" type="xsd:string" minOccurs="1" maxOccurs="unbounded"/>
      </xs:sequence>
      <xs:attributeGroup ref="uddi:TModelBag.att"/>
   </xs:complexType>
   <xs:attributeGroup name="TModelBag.att"/>

<!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
<!-- CLASS: TModelInstanceInfo  -->
<!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->

   <xs:element name="TModelInstanceInfo" type="uddi:TModelInstanceInfo"/>
   <xs:complexType name="TModelInstanceInfo">
      <xs:annotation>
         <xs:documentation>Support element used to contain implementation instance specific information about compatible specifications (via tModel reference) and optional settings details.</xs:documentation>
      </xs:annotation>
      <xs:sequence>
         <xs:element name="description" type="uddi:StringI18N" minOccurs="0" maxOccurs="unbounded"/>
         <xs:element name="instanceDetails" type="uddi:InstanceDetails" minOccurs="0" maxOccurs="1"/>
      </xs:sequence>
      <xs:attributeGroup ref="uddi:TModelInstanceInfo.att"/>
   </xs:complexType>
   <xs:attributeGroup name="TModelInstanceInfo.att">
      <xs:attribute name="tModelKey" type="xs:string"/>
   </xs:attributeGroup>

<!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
<!-- ENUMERATION: <<enumeration>> URLType  -->
<!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->

   <xs:simpleType name="URLType">
      <xs:restriction base="xsd:NMTOKEN">
         <xs:enumeration value="mailto"/>
         <xs:enumeration value="http"/>
         <xs:enumeration value="https"/>
         <xs:enumeration value="ftp"/>
         <xs:enumeration value="fax"/>
         <xs:enumeration value="phone"/>
         <xs:enumeration value="other"/>
      </xs:restriction>
   </xs:simpleType>

<!-- _______________________________________________________________ -->
<!--                                                                 -->
<!-- PACKAGE: <<XSDschema>> Contact  -->
<!-- _______________________________________________________________ -->


<!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
<!-- CLASS: <<XSDtopLevelElement>> address  -->
<!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->

   <xs:element name="address" type="uddi:StreetAddress" substitutionGroup="uddi:StreetAddress"/>

<!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
<!-- CLASS: Contact  -->
<!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->

   <xs:element name="Contact" type="uddi:Contact"/>
   <xs:complexType name="Contact">
      <xs:sequence>
         <xs:element name="description" type="xsd:string" minOccurs="0" maxOccurs="unbounded"/>
         <xs:element name="personName" type="xsd:string"/>
         <xs:element ref="uddi:Locator" minOccurs="0" maxOccurs="unbounded"/>
      </xs:sequence>
      <xs:attributeGroup ref="uddi:Contact.att"/>
   </xs:complexType>
   <xs:attributeGroup name="Contact.att"/>

<!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
<!-- CLASS: <<XSDtopLevelElement>> contact  -->
<!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->

   <xs:element name="contact" type="uddi:Contact" substitutionGroup="uddi:Contact"/>

<!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
<!-- CLASS: <<XSDtopLevelElement>> email  -->
<!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->

   <xs:element name="email" type="uddi:EmailAddress" substitutionGroup="uddi:EmailAddress"/>

<!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
<!-- CLASS: EmailAddress  -->
<!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->

   <xs:element name="EmailAddress" type="uddi:EmailAddress" substitutionGroup="uddi:Locator"/>
   <xs:complexType name="EmailAddress">
      <xs:simpleContent>
         <xs:extension base="xsd:string">
            <xs:attributeGroup ref="uddi:Locator.att"/>
            <xs:attributeGroup ref="uddi:EmailAddress.att"/>
         </xs:extension>
      </xs:simpleContent>
   </xs:complexType>
   <xs:attributeGroup name="EmailAddress.att"/>

<!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
<!-- CLASS: Locator  -->
<!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->

   <xs:element name="Locator" type="uddi:Locator"/>
   <xs:complexType name="Locator" abstract="true">
      <xs:attributeGroup ref="uddi:Locator.att"/>
   </xs:complexType>
   <xs:attributeGroup name="Locator.att">
      <xs:attribute name="useType" type="xsd:string"/>
   </xs:attributeGroup>

<!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
<!-- CLASS: <<XSDtopLevelElement>> phone  -->
<!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->

   <xs:element name="phone" type="uddi:PhoneNumber" substitutionGroup="uddi:PhoneNumber"/>

<!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
<!-- CLASS: PhoneNumber  -->
<!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->

   <xs:element name="PhoneNumber" type="uddi:PhoneNumber" substitutionGroup="uddi:Locator"/>
   <xs:complexType name="PhoneNumber">
      <xs:simpleContent>
         <xs:extension base="xsd:string">
            <xs:attributeGroup ref="uddi:Locator.att"/>
            <xs:attributeGroup ref="uddi:PhoneNumber.att"/>
         </xs:extension>
      </xs:simpleContent>
   </xs:complexType>
   <xs:attributeGroup name="PhoneNumber.att"/>

<!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
<!-- CLASS: StreetAddress  -->
<!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->

   <xs:element name="StreetAddress" type="uddi:StreetAddress" substitutionGroup="uddi:Locator"/>
   <xs:complexType name="StreetAddress">
      <xs:annotation>
         <xs:documentation>A printable, free-form address. Typed by convention. Sort not used.</xs:documentation>
      </xs:annotation>
      <xs:complexContent>
         <xs:extension base="uddi:Locator">
            <xs:sequence>
               <xs:element name="addressLine" type="xsd:string" minOccurs="0" maxOccurs="unbounded"/>
            </xs:sequence>
            <xs:attributeGroup ref="uddi:StreetAddress.att"/>
         </xs:extension>
      </xs:complexContent>
   </xs:complexType>
   <xs:attributeGroup name="StreetAddress.att">
      <xs:attribute name="sortCode" type="xsd:string" use="required"/>
   </xs:attributeGroup>

<!-- _______________________________________________________________ -->
<!--                                                                 -->
<!-- PACKAGE: <<XSDschema>> Messages  -->
<!-- _______________________________________________________________ -->


<!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
<!-- CLASS: BusinessDetail  -->
<!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->

   <xs:element name="BusinessDetail" type="msg:BusinessDetail"/>
   <xs:complexType name="BusinessDetail">
      <xs:sequence>
         <xs:element ref="uddi:BusinessEntity" minOccurs="0" maxOccurs="unbounded"/>
      </xs:sequence>
      <xs:attributeGroup ref="msg:BusinessDetail.att"/>
   </xs:complexType>
   <xs:attributeGroup name="BusinessDetail.att">
      <xs:attribute name="generic" type="xsd:string" use="required"/>
      <xs:attribute name="operator" type="xsd:string" use="required"/>
      <xs:attribute name="truncated" type="xsd:boolean" use="required"/>
   </xs:attributeGroup>

<!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
<!-- CLASS: BusinessInfo  -->
<!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->

   <xs:element name="BusinessInfo" type="msg:BusinessInfo"/>
   <xs:complexType name="BusinessInfo">
      <xs:sequence>
         <xs:element name="name" type="xsd:string"/>
         <xs:element name="description" type="xsd:string" minOccurs="0" maxOccurs="unbounded"/>
         <xs:element name="serviceInfos" minOccurs="0" maxOccurs="1">
            <xs:complexType>
               <xs:sequence>
                  <xs:element ref="msg:ServiceInfo" minOccurs="0" maxOccurs="unbounded"/>
               </xs:sequence>
            </xs:complexType>
         </xs:element>
      </xs:sequence>
      <xs:attributeGroup ref="msg:BusinessInfo.att"/>
   </xs:complexType>
   <xs:attributeGroup name="BusinessInfo.att">
      <xs:attribute name="businessKey" type="xsd:string" use="required"/>
   </xs:attributeGroup>

<!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
<!-- CLASS: BusinessList  -->
<!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->

   <xs:element name="BusinessList" type="msg:BusinessList"/>
   <xs:complexType name="BusinessList">
      <xs:sequence>
         <xs:element name="businessInfos" minOccurs="0" maxOccurs="1">
            <xs:complexType>
               <xs:sequence>
                  <xs:element ref="msg:BusinessInfo" minOccurs="0" maxOccurs="unbounded"/>
               </xs:sequence>
            </xs:complexType>
         </xs:element>
      </xs:sequence>
      <xs:attributeGroup ref="msg:BusinessList.att"/>
   </xs:complexType>
   <xs:attributeGroup name="BusinessList.att">
      <xs:attribute name="generic" type="xsd:string" use="required"/>
      <xs:attribute name="operator" type="xsd:string" use="required"/>
      <xs:attribute name="truncated" type="xsd:boolean" use="required"/>
   </xs:attributeGroup>

<!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
<!-- CLASS: find_business  -->
<!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->

   <xs:element name="find_business" type="msg:find_business"/>
   <xs:complexType name="find_business">
      <xs:sequence>
         <xs:element name="findQualifiers" minOccurs="0" maxOccurs="1">
            <xs:complexType>
               <xs:sequence>
                  <xs:element ref="msg:findQualifier" minOccurs="0" maxOccurs="unbounded"/>
               </xs:sequence>
            </xs:complexType>
         </xs:element>
         <xs:element name="name" type="xsd:string" minOccurs="0" maxOccurs="1"/>
         <xs:element ref="uddi:IdentifierBag" minOccurs="0" maxOccurs="1"/>
         <xs:element ref="uddi:CategoryBag" minOccurs="0" maxOccurs="1"/>
         <xs:element ref="uddi:TModelBag" minOccurs="0" maxOccurs="1"/>
         <xs:element name="discoveryURLs" minOccurs="0" maxOccurs="1">
            <xs:complexType>
               <xs:sequence>
                  <xs:element ref="uddi:DiscoveryURL" minOccurs="0" maxOccurs="unbounded"/>
               </xs:sequence>
            </xs:complexType>
         </xs:element>
      </xs:sequence>
      <xs:attributeGroup ref="msg:find_business.att"/>
   </xs:complexType>
   <xs:attributeGroup name="find_business.att">
      <xs:attribute name="generic" type="xsd:string" use="required"/>
      <xs:attribute name="maxRows" type="xsd:integer" use="required"/>
   </xs:attributeGroup>

<!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
<!-- CLASS: findQualifier  -->
<!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->

   <xs:element name="findQualifier" type="msg:findQualifier"/>
   <xs:complexType name="findQualifier">
      <xs:simpleContent>
         <xs:extension base="xsd:string">
            <xs:attributeGroup ref="msg:findQualifier.att"/>
         </xs:extension>
      </xs:simpleContent>
   </xs:complexType>
   <xs:attributeGroup name="findQualifier.att"/>

<!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
<!-- CLASS: get_businessDetail  -->
<!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->

   <xs:element name="get_businessDetail" type="msg:get_businessDetail"/>
   <xs:complexType name="get_businessDetail">
      <xs:sequence>
         <xs:element name="businessKey" type="xsd:string" minOccurs="1" maxOccurs="unbounded"/>
      </xs:sequence>
      <xs:attributeGroup ref="msg:get_businessDetail.att"/>
   </xs:complexType>
   <xs:attributeGroup name="get_businessDetail.att">
      <xs:attribute name="generic" type="xsd:string" use="required"/>
   </xs:attributeGroup>

<!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
<!-- CLASS: get_serviceDetail  -->
<!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->

   <xs:element name="get_serviceDetail" type="msg:get_serviceDetail"/>
   <xs:complexType name="get_serviceDetail">
      <xs:sequence>
         <xs:element name="serviceKey" type="xsd:string" minOccurs="1" maxOccurs="unbounded"/>
      </xs:sequence>
      <xs:attributeGroup ref="msg:get_serviceDetail.att"/>
   </xs:complexType>
   <xs:attributeGroup name="get_serviceDetail.att">
      <xs:attribute name="generic" type="xsd:string" use="required"/>
   </xs:attributeGroup>

<!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
<!-- CLASS: ServiceDetail  -->
<!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->

   <xs:element name="ServiceDetail" type="msg:ServiceDetail"/>
   <xs:complexType name="ServiceDetail">
      <xs:sequence>
         <xs:element ref="uddi:BusinessService" minOccurs="0" maxOccurs="unbounded"/>
      </xs:sequence>
      <xs:attributeGroup ref="msg:ServiceDetail.att"/>
   </xs:complexType>
   <xs:attributeGroup name="ServiceDetail.att">
      <xs:attribute name="generic" type="xsd:string" use="required"/>
      <xs:attribute name="operator" type="xsd:string" use="required"/>
      <xs:attribute name="truncated" type="xsd:boolean" use="required"/>
   </xs:attributeGroup>

<!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
<!-- CLASS: ServiceInfo  -->
<!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->

   <xs:element name="ServiceInfo" type="msg:ServiceInfo"/>
   <xs:complexType name="ServiceInfo">
      <xs:sequence>
         <xs:element name="name" type="xsd:string"/>
      </xs:sequence>
      <xs:attributeGroup ref="msg:ServiceInfo.att"/>
   </xs:complexType>
   <xs:attributeGroup name="ServiceInfo.att">
      <xs:attribute name="serviceKey" type="xsd:string" use="required"/>
      <xs:attribute name="businessKey" type="xsd:string" use="required"/>
   </xs:attributeGroup>

<!-- _______________________________________________________________ -->
<!--                                                                 -->
<!-- PACKAGE: <<XSDschema>> Substitutions  -->
<!-- _______________________________________________________________ -->


<!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
<!-- CLASS: <<XSDtopLevelElement>> accessPoint  -->
<!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->

   <xs:element name="accessPoint" type="uddi:AccessPoint" substitutionGroup="uddi:AccessPoint"/>

<!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
<!-- CLASS: <<XSDtopLevelElement>> bindingTemplate  -->
<!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->

   <xs:element name="bindingTemplate" type="uddi:BindingTemplate" substitutionGroup="uddi:BindingTemplate"/>

<!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
<!-- CLASS: <<XSDtopLevelElement>> businessDetail  -->
<!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->

   <xs:element name="businessDetail" type="msg:BusinessDetail" substitutionGroup="msg:BusinessDetail"/>

<!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
<!-- CLASS: <<XSDtopLevelElement>> businessEntity  -->
<!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->

   <xs:element name="businessEntity" type="uddi:BusinessEntity" substitutionGroup="uddi:BusinessEntity"/>

<!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
<!-- CLASS: <<XSDtopLevelElement>> businessInfo  -->
<!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->

   <xs:element name="businessInfo" type="msg:BusinessInfo" substitutionGroup="msg:BusinessInfo"/>

<!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
<!-- CLASS: <<XSDtopLevelElement>> businessList  -->
<!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->

   <xs:element name="businessList" type="msg:BusinessList" substitutionGroup="msg:BusinessList"/>

<!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
<!-- CLASS: <<XSDtopLevelElement>> businessService  -->
<!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->

   <xs:element name="businessService" type="uddi:BusinessService" substitutionGroup="uddi:BusinessService"/>

<!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
<!-- CLASS: <<XSDtopLevelElement>> categoryBag  -->
<!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->

   <xs:element name="categoryBag" type="uddi:CategoryBag" substitutionGroup="uddi:CategoryBag"/>

<!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
<!-- CLASS: <<XSDtopLevelElement>> discoveryURL  -->
<!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->

   <xs:element name="discoveryURL" type="uddi:DiscoveryURL" substitutionGroup="uddi:DiscoveryURL"/>

<!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
<!-- CLASS: <<XSDtopLevelElement>> hostingRedirector  -->
<!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->

   <xs:element name="hostingRedirector" type="uddi:HostingRedirector" substitutionGroup="uddi:HostingRedirector"/>

<!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
<!-- CLASS: <<XSDtopLevelElement>> identifierBag  -->
<!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->

   <xs:element name="identifierBag" type="uddi:IdentifierBag" substitutionGroup="uddi:IdentifierBag"/>

<!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
<!-- CLASS: <<XSDtopLevelElement>> serviceInfo  -->
<!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->

   <xs:element name="serviceInfo" type="msg:ServiceInfo" substitutionGroup="msg:ServiceInfo"/>

<!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
<!-- CLASS: <<XSDtopLevelElement>> tModel  -->
<!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->

   <xs:element name="tModel" type="uddi:TModel" substitutionGroup="uddi:TModel"/>

<!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
<!-- CLASS: <<XSDtopLevelElement>> tModelInstanceInfo  -->
<!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->

   <xs:element name="tModelInstanceInfo" type="uddi:TModelInstanceInfo" substitutionGroup="uddi:TModelInstanceInfo"/>
</xs:schema>