<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
  xmlns:core="http://schema.omg.org/spec/CTS2/1.0/Core"
  xmlns:coreService="http://schema.omg.org/spec/CTS2/1.0/CoreService"
  xmlns:entity="http://schema.omg.org/spec/CTS2/1.0/Entity"
  xmlns:tns="http://schema.omg.org/spec/CTS2/1.0/wsdl/EntityDescriptionQueryServices"
  attributeFormDefault="qualified"
  elementFormDefault="qualified"
  targetNamespace="http://schema.omg.org/spec/CTS2/1.0/wsdl/EntityDescriptionQueryServices">
  
  <xs:import namespace="http://schema.omg.org/spec/CTS2/1.0/Core" schemaLocation="../core/Core.xsd"/>
  <xs:import namespace="http://schema.omg.org/spec/CTS2/1.0/CoreService" schemaLocation="../core/CoreService.xsd"/>
  <xs:import namespace="http://schema.omg.org/spec/CTS2/1.0/Entity" schemaLocation="../entity/Entity.xsd"/>
  <xs:import namespace="http://schema.omg.org/spec/CTS2/1.0/wsdl/BaseServiceTypes" schemaLocation="BaseServiceTypes.xsd"/>
  <xs:import namespace="http://schema.omg.org/spec/CTS2/1.0/wsdl/BaseQueryServiceTypes" schemaLocation="BaseQueryServiceTypes.xsd"/>
  
  <xs:element name="getAllEntities" type="tns:getAllEntities"/>
  <xs:complexType name="getAllEntities"/>
  
  <xs:element name="getAllEntitiesResponse" type="tns:getAllEntitiesResponse"/>
  <xs:complexType name="getAllEntitiesResponse">
    <xs:sequence>
      <xs:element name="return" type="core:EntityDirectoryURI"/>
    </xs:sequence>    
  </xs:complexType>
  
  <xs:element name="getKnownCodeSystems" type="tns:getKnownCodeSystems"/>
  <xs:complexType name="getKnownCodeSystems"/>
  
  <xs:element name="getKnownCodeSystemsResponse" type="tns:getKnownCodeSystemsResponse"/>
  <xs:complexType name="getKnownCodeSystemsResponse">
    <xs:sequence>
      <xs:element minOccurs="0" maxOccurs="unbounded" name="return" type="core:CodeSystemReference"/>
    </xs:sequence>    
  </xs:complexType>
  
  <xs:element name="getKnownCodeSystemVersions" type="tns:getKnownCodeSystemVersions"/>
  <xs:complexType name="getKnownCodeSystemVersions"/>
  
  <xs:element name="getKnownCodeSystemVersionsResponse" type="tns:getKnownCodeSystemVersionsResponse"/>
  <xs:complexType name="getKnownCodeSystemVersionsResponse">
    <xs:sequence>
      <xs:element minOccurs="0" maxOccurs="unbounded" name="return" type="core:CodeSystemVersionReference"/>
    </xs:sequence>    
  </xs:complexType>
  
  <xs:element name="getSupportedVersionTags" type="tns:getSupportedVersionTags"/>
  <xs:complexType name="getSupportedVersionTags"/>
  <xs:element name="getSupportedVersionTagsResponse" type="tns:getSupportedVersionTagsResponse"/>
  <xs:complexType name="getSupportedVersionTagsResponse">
    <xs:sequence>
      <xs:element minOccurs="1" maxOccurs="unbounded" name="return" type="core:VersionTagReference"/>
    </xs:sequence>    
  </xs:complexType>
  
  <xs:element name="difference" type="tns:restrict"/>
  <xs:complexType name="difference">
    <xs:sequence>
      <xs:element name="initialSet" type="core:EntityDirectoryURI"/>
      <xs:element name="elementsToRemove" type="core:EntityDirectoryURI"/>
    </xs:sequence>    
  </xs:complexType>
  
  <xs:element name="differenceResponse" type="tns:differenceResponse"/>
  <xs:complexType name="differenceResponse">
    <xs:sequence>
      <xs:element name="return" type="core:EntityDirectoryURI"/>
    </xs:sequence>    
  </xs:complexType>
  
  <xs:element name="intersect" type="tns:intersect"/>
  <xs:complexType name="intersect">
    <xs:sequence>
      <xs:element name="directory1" type="core:EntityDirectoryURI"/>
      <xs:element name="directory2" type="core:EntityDirectoryURI"/>
    </xs:sequence>    
  </xs:complexType>
  
  <xs:element name="intersectResponse" type="tns:intersectResponse"/>
  <xs:complexType name="intersectResponse">
    <xs:sequence>
      <xs:element name="return" type="core:EntityDirectoryURI"/>
    </xs:sequence>    
  </xs:complexType>
  
  <xs:element name="union" type="tns:union"/>
  <xs:complexType name="union">
    <xs:sequence>
      <xs:element name="directory1" type="core:EntityDirectoryURI"/>
      <xs:element name="directory2" type="core:EntityDirectoryURI"/>
    </xs:sequence>    
  </xs:complexType>
  
  <xs:element name="unionResponse" type="tns:unionResponse"/>
  <xs:complexType name="unionResponse">
    <xs:sequence>
      <xs:element name="return" type="core:EntityDirectoryURI"/>
    </xs:sequence>    
  </xs:complexType>
  
  <xs:element name="resolve" type="tns:resolve"/>
  <xs:complexType name="resolve">
    <xs:sequence>
      <xs:element minOccurs="1" name="directory" type="core:EntityDirectoryURI"/>
      <xs:element minOccurs="0" name="queryControl" type="coreService:QueryControl"/>
      <xs:element minOccurs="0" name="context" type="coreService:ReadContext"/>
    </xs:sequence>    
  </xs:complexType>
  
  <xs:element name="resolveResponse" type="tns:resolveResponse"/>
  <xs:complexType name="resolveResponse">
    <xs:sequence>
      <xs:element ref="entity:EntityDirectory"/>
    </xs:sequence>    
  </xs:complexType>
  
  <xs:element name="restrict" type="tns:restrict"/>
  <xs:complexType name="restrict">
    <xs:sequence>
      <xs:element minOccurs="1" name="directory" type="core:EntityDirectoryURI"/>
      <xs:element minOccurs="1" name="filter" type="core:Filter"/>
    </xs:sequence>    
  </xs:complexType>
  
  <xs:element name="restrictResponse" type="tns:restrictResponse"/>
  <xs:complexType name="restrictResponse">
    <xs:sequence>
      <xs:element name="return" type="core:EntityDirectoryURI"/>
    </xs:sequence>    
  </xs:complexType>
  
  <xs:element name="resolveAsEntityReferenceList" type="tns:resolveAsEntityReferenceList"/>
  <xs:complexType name="resolveAsEntityReferenceList">
    <xs:sequence>
      <xs:element minOccurs="1" name="directory" type="core:EntityDirectoryURI"/>
      <xs:element minOccurs="0" name="queryControl" type="coreService:QueryControl"/>
      <xs:element minOccurs="0" name="context" type="coreService:ReadContext"/>
    </xs:sequence>    
  </xs:complexType>
  
  <xs:element name="resolveAsEntityReferenceListResponse" type="tns:resolveAsEntityReferenceListResponse"/>
  <xs:complexType name="resolveAsEntityReferenceListResponse">
    <xs:sequence>
      <xs:element name="return" type="core:EntityReferenceList"/>
    </xs:sequence>    
  </xs:complexType>
  
  <xs:element name="count" type="tns:count"/>
  <xs:complexType name="count">
    <xs:sequence>
      <xs:element minOccurs="1" name="directory" type="core:EntityDirectoryURI"/>
      <xs:element minOccurs="0" name="context" type="coreService:ReadContext"/>
      <xs:element minOccurs="0" name="timeout" type="core:NaturalNumber"/>
    </xs:sequence>    
  </xs:complexType>
  
  <xs:element name="countResponse" type="tns:countResponse"/>
  <xs:complexType name="countResponse">
    <xs:sequence>
      <xs:element name="return" type="core:NaturalNumber"/>
    </xs:sequence>    
  </xs:complexType>
  
  <xs:element name="restrictToCodeSystemVersion" type="tns:restrictToCodeSystemVersion"/>
  <xs:complexType name="restrictToCodeSystemVersion">
    <xs:sequence>
      <xs:element minOccurs="1" name="directory" type="core:EntityDirectoryURI"/>
      <xs:element minOccurs="0" name="codeSystemVersion" type="coreService:NameOrURI"/>
    </xs:sequence>    
  </xs:complexType>
  
  <xs:element name="restrictToCodeSystemVersionResponse" type="tns:restrictToCodeSystemVersionResponse"/>
  <xs:complexType name="restrictToCodeSystemVersionResponse">
    <xs:sequence>
      <xs:element name="return" type="core:EntityDirectoryURI"/>
    </xs:sequence>    
  </xs:complexType>
  
  <xs:element name="restrictToEntities" type="tns:restrictToEntities"/>
  <xs:complexType name="restrictToEntities">
    <xs:sequence>
      <xs:element minOccurs="1" name="directory" type="core:EntityDirectoryURI"/>
      <xs:element minOccurs="1" name="list" type="coreService:EntityNameOrURIList"/>
    </xs:sequence>    
  </xs:complexType>
  
  <xs:element name="restrictToEntitiesResponse" type="tns:restrictToEntitiesResponse"/>
  <xs:complexType name="restrictToEntitiesResponse">
    <xs:sequence>
      <xs:element name="return" type="core:EntityDirectoryURI"/>
    </xs:sequence>    
  </xs:complexType>
  
  <xs:element name="resolveAsList" type="tns:resolveAsList"/>
  <xs:complexType name="resolveAsList">
    <xs:sequence>
      <xs:element minOccurs="1" name="directory" type="core:EntityDirectoryURI"/>
      <xs:element minOccurs="0" name="resolveOnlyCodeSystem" type="coreService:NameOrURI"/>
      <xs:element minOccurs="0" name="queryControl" type="coreService:QueryControl"/>
      <xs:element minOccurs="0" name="context" type="coreService:ReadContext"/>
    </xs:sequence>    
  </xs:complexType>
  
  <xs:element name="resolveAsListResponse" type="tns:resolveAsListResponse"/>
  <xs:complexType name="resolveAsListResponse">
    <xs:sequence>
      <xs:element ref="entity:EntityList"/>
    </xs:sequence>    
  </xs:complexType>
  
  <xs:element name="restrictToCodeSystem" type="tns:restrictToCodeSystem"/>
  <xs:complexType name="restrictToCodeSystem">
    <xs:sequence>
      <xs:element minOccurs="1" name="directory" type="core:EntityDirectoryURI"/>
      <xs:element minOccurs="1" name="codeSystem" type="coreService:NameOrURI"/>
      <xs:element minOccurs="0" name="tag" type="core:VersionTagReference"/>
    </xs:sequence>    
  </xs:complexType>
  
  <xs:element name="restrictToCodeSystemResponse" type="tns:restrictToCodeSystemResponse"/>
  <xs:complexType name="restrictToCodeSystemResponse">
    <xs:sequence>
      <xs:element name="return" type="core:EntityDirectoryURI"/>
    </xs:sequence>    
  </xs:complexType>
  
  <xs:element name="isEntityInSet" type="tns:isEntityInSet"/>
  <xs:complexType name="isEntityInSet">
    <xs:sequence>
      <xs:element minOccurs="1" name="directory" type="core:EntityDirectoryURI"/>
      <xs:element minOccurs="1" name="entityReference" type="coreService:EntityNameOrURI"/>
      <xs:element minOccurs="1" name="context" type="coreService:ReadContext"/>
    </xs:sequence>    
  </xs:complexType>
  
  <xs:element name="isEntityInSetResponse" type="tns:isEntityInSetResponse"/>
  <xs:complexType name="isEntityInSetResponse">
    <xs:sequence>
      <xs:element name="return" type="core:Boolean"/>
    </xs:sequence>    
  </xs:complexType>
  
  <xs:element name="intersectEntityList" type="tns:intersectEntityList"/>
  <xs:complexType name="intersectEntityList">
    <xs:sequence>
      <xs:element minOccurs="1" name="directory" type="core:EntityDirectoryURI"/>
      <xs:element minOccurs="1" name="entityList" type="coreService:EntityNameOrURIList"/>
      <xs:element minOccurs="0" name="context" type="coreService:ReadContext"/>
    </xs:sequence>    
  </xs:complexType>
  
  <xs:element name="intersectEntityListResponse" type="tns:intersectEntityListResponse"/>
  <xs:complexType name="intersectEntityListResponse">
    <xs:sequence>
      <xs:element name="return" type="coreService:EntityNameOrURIList"/>
    </xs:sequence>    
  </xs:complexType>
  
</xs:schema>
