<?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:association="http://schema.omg.org/spec/CTS2/1.0/Association"
	xmlns:coreservice="http://schema.omg.org/spec/CTS2/1.0/CoreService"
	xmlns="http://schema.omg.org/spec/CTS2/1.0/AssociationServices" 
	targetNamespace="http://schema.omg.org/spec/CTS2/1.0/AssociationServices" elementFormDefault="qualified">
	<xs:import namespace="http://schema.omg.org/spec/CTS2/1.0/Core" schemaLocation="http://informatics.mayo.edu/svn/trunk/cts2/spec/psm/rest/schema/Core.xsd"/>
	<xs:import namespace="http://schema.omg.org/spec/CTS2/1.0/Association" schemaLocation="http://informatics.mayo.edu/svn/trunk/cts2/spec/psm/rest/schema/Association.xsd"/>
	<xs:import namespace="http://schema.omg.org/spec/CTS2/1.0/CoreService" schemaLocation="http://informatics.mayo.edu/svn/trunk/cts2/spec/psm/rest/serviceSchema/CoreService.xsd" />
	
	<xs:element name="BaseAssociationService" type="BaseAssociationService"/>
	<xs:complexType name="BaseAssociationService">
		<xs:sequence>
			<xs:element name="knownCodeSystemVersion" type="core:CodeSystemVersionReference" minOccurs="0" maxOccurs="unbounded"/>
			<xs:element name="knownPredicate" type="core:PredicateReference" minOccurs="0" maxOccurs="unbounded"/>
		</xs:sequence>
	</xs:complexType>
	
	<xs:element name="AssociationMaintenanceService" type="AssociationMaintenanceService"/>
	<xs:complexType name="AssociationMaintenanceService">
		<xs:sequence>
			<xs:element name="knownCodeSystemVersion" type="core:CodeSystemVersionReference" minOccurs="0" maxOccurs="unbounded"/>
			<xs:element name="knownPredicate" type="core:PredicateReference" minOccurs="0" maxOccurs="unbounded"/>
		</xs:sequence>
	</xs:complexType>
	
	<xs:element name="UpdateAssociationRequest" type="UpdateAssociationRequest"/>
	<xs:complexType name="UpdateAssociationRequest">
		<xs:sequence>
			<xs:element name="associationQualifier" type="core:Property" minOccurs="0" maxOccurs="unbounded"/>
			<xs:element name="target" type="core:StatementTarget" minOccurs="1" maxOccurs="1"/>
			<xs:element name="targetExpression" type="association:AssociationRendering" minOccurs="1" maxOccurs="1"/>
		</xs:sequence>
	</xs:complexType>
	
	<xs:element name="AdvancedAssociationQueryService" type="AdvancedAssociationQueryService"/>
	<xs:complexType name="AdvancedAssociationQueryService">
		<xs:complexContent>
			<xs:extension base="AssociationQueryService">
				<xs:sequence/>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>
	
	<xs:element name="AssociationQueryService" type="AssociationQueryService"/>
	<xs:complexType name="AssociationQueryService">
		<xs:complexContent>
			<xs:extension base="coreservice:BaseQueryService">
				<xs:sequence>
					<xs:element name="supportedCodeSystemVersion" type="core:CodeSystemVersionReference" minOccurs="0" maxOccurs="unbounded"/>
					<xs:element name="supportedSourceAndNotation" type="core:SourceAndNotation" minOccurs="0" maxOccurs="unbounded"/>
				</xs:sequence>
				<xs:attribute name="associations" type="xs:string" use="required"/>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>
	
	<xs:element name="AssociationReadService" type="AssociationReadService"/>
	<xs:complexType name="AssociationReadService">
		<xs:sequence>
			<xs:element name="knownCodeSystemVersion" type="core:CodeSystemVersionReference" minOccurs="0" maxOccurs="unbounded"/>
			<xs:element name="knownPredicate" type="core:PredicateReference" minOccurs="0" maxOccurs="unbounded"/>
		</xs:sequence>
	</xs:complexType>
	
	<xs:element name="ReasoningService" type="ReasoningService"/>
	<xs:complexType name="ReasoningService">
		<xs:complexContent>
			<xs:extension base="BaseAssociationService">
				<xs:sequence>
					<xs:element name="defaultSyntaxAndNotation" type="core:OntologyLanguageAndSyntax" minOccurs="0" maxOccurs="1"/>
					<xs:element name="supportedSyntaxAndNotation" type="core:OntologyLanguageAndSyntax" minOccurs="0" maxOccurs="unbounded"/>
				</xs:sequence>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>
	
	<!-- Maintenance Exceptions -->
	<xs:element name="UnsupportedSubjectNamespaceName" type="UnsupportedSubjectNamespaceName"/>
	<xs:complexType name="UnsupportedSubjectNamespaceName">
		<xs:annotation>
			<xs:documentation>The namespace in the subject identifier is not known to or supported by the service</xs:documentation>
		</xs:annotation>
		<xs:complexContent>
			<xs:extension base="coreservice:UnsupportedNamespaceName">
				<xs:sequence/>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>
	
	<xs:element name="UnsupportedAssociationQualifier" type="UnsupportedAssociationQualifier"/>
	<xs:complexType name="UnsupportedAssociationQualifier">
		<xs:annotation>
			<xs:documentation>The predicate of an association qualifier is not recognized by the service or is not considered to be a valid association qualifier.</xs:documentation>
		</xs:annotation>
		<xs:complexContent>
			<xs:extension base="coreservice:UnsupportedPredicate">
				<xs:sequence/>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>
	
	<xs:element name="UnknownTargetEntity" type="UnknownTargetEntity"/>
	<xs:complexType name="UnknownTargetEntity">
		<xs:annotation>
			<xs:documentation>The target EntityNameOrURI is not known to the service</xs:documentation>
		</xs:annotation>
		<xs:complexContent>
			<xs:extension base="coreservice:UnknownEntity">
				<xs:sequence/>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>
	
	<xs:element name="UnknownAssociationQualifierNamespaceName" type="UnknownAssociationQualifierNamespaceName"/>
	<xs:complexType name="UnknownAssociationQualifierNamespaceName">
		<xs:annotation>
			<xs:documentation>The namespace in the predicate identifier is not known to or supported by the service</xs:documentation>
		</xs:annotation>
		<xs:complexContent>
			<xs:extension base="UnknownPredicateNamespaceName">
				<xs:sequence/>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>
	
	<xs:element name="AssociationAlreadyExists" type="AssociationAlreadyExists"/>
	<xs:complexType name="AssociationAlreadyExists">
		<xs:annotation>
			<xs:documentation>The service has determined that an association with the same identity criteria as the supplied association already exists in the service.  What constitutes identity from an association standpoint is up to the service implementation.</xs:documentation>
		</xs:annotation>
		<xs:sequence>
			<xs:element name="exceptionType" type="coreservice:ExceptionType" minOccurs="1" maxOccurs="1"/>
			<xs:element name="message" type="core:OpaqueData" minOccurs="0" maxOccurs="1"/>
			<xs:element name="severity" type="coreservice:LoggingLevel" minOccurs="1" maxOccurs="1"/>
			<xs:element name="unsupportedPredicate" type="coreservice:UnsupportedPredicate" minOccurs="1" maxOccurs="1"/>
			<xs:element name="changeSetIsNotOpen" type="coreservice:ChangeSetIsNotOpen" minOccurs="1" maxOccurs="1"/>
			<xs:element name="unknownChangeSet" type="coreservice:UnknownChangeSet" minOccurs="1" maxOccurs="1"/>
			<xs:element name="unknownTargetNamespaceName" type="UnknownTargetNamespaceName" minOccurs="1" maxOccurs="1"/>
			<xs:element name="unknownSubjectEntity" type="UnknownSubjectEntity" minOccurs="1" maxOccurs="1"/>
			<xs:element name="unknownPredicateNamespaceName" type="UnknownPredicateNamespaceName" minOccurs="1" maxOccurs="1"/>
			<xs:element name="unknownAssociationQualifierNamespaceName" type="UnknownAssociationQualifierNamespaceName" minOccurs="1" maxOccurs="1"/>
			<xs:element name="unknownTargetEntity" type="UnknownTargetEntity" minOccurs="1" maxOccurs="1"/>
			<xs:element name="unsupportedAssociationQualifier" type="UnsupportedAssociationQualifier" minOccurs="1" maxOccurs="1"/>
			<xs:element name="unsupportedSubjectNamespaceName" type="UnsupportedSubjectNamespaceName" minOccurs="1" maxOccurs="1"/>
		</xs:sequence>
	</xs:complexType>
	
	<xs:element name="UnknownPredicateNamespaceName" type="UnknownPredicateNamespaceName"/>
	<xs:complexType name="UnknownPredicateNamespaceName">
		<xs:annotation>
			<xs:documentation>The namespace in the predicate identifier is not known to or supported by the service</xs:documentation>
		</xs:annotation>
		<xs:complexContent>
			<xs:extension base="coreservice:UnsupportedNamespaceName">
				<xs:sequence/>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>
	
	<xs:element name="UnknownSubjectEntity" type="UnknownSubjectEntity"/>
	<xs:complexType name="UnknownSubjectEntity">
		<xs:annotation>
			<xs:documentation>The EntityNameOrURI is not known to the service</xs:documentation>
		</xs:annotation>
		<xs:complexContent>
			<xs:extension base="coreservice:UnknownEntity">
				<xs:sequence/>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>
	
	<xs:element name="UnknownTargetNamespaceName" type="UnknownTargetNamespaceName"/>
	<xs:complexType name="UnknownTargetNamespaceName">
		<xs:annotation>
			<xs:documentation>The namespace in a target entity identifier is not known to or supported by the service</xs:documentation>
		</xs:annotation>
		<xs:complexContent>
			<xs:extension base="coreservice:UnsupportedNamespaceName">
				<xs:sequence/>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>
	
	<xs:element name="AssociationAuthoringExceptions" type="AssociationAuthoringExceptions"/>
	<xs:complexType name="AssociationAuthoringExceptions">
		<xs:sequence>
			<xs:element name="unsupportedPredicate" type="coreservice:UnsupportedPredicate" minOccurs="1" maxOccurs="1"/>
			<xs:element name="changeSetIsNotOpen" type="coreservice:ChangeSetIsNotOpen" minOccurs="1" maxOccurs="1"/>
			<xs:element name="unknownChangeSet" type="coreservice:UnknownChangeSet" minOccurs="1" maxOccurs="1"/>
			<xs:element name="unknownTargetNamespaceName" type="UnknownTargetNamespaceName" minOccurs="1" maxOccurs="1"/>
			<xs:element name="unknownSubjectEntity" type="UnknownSubjectEntity" minOccurs="1" maxOccurs="1"/>
			<xs:element name="unknownPredicateNamespaceName" type="UnknownPredicateNamespaceName" minOccurs="1" maxOccurs="1"/>
			<xs:element name="unknownAssociationQualifierNamespaceName" type="UnknownAssociationQualifierNamespaceName" minOccurs="1" maxOccurs="1"/>
			<xs:element name="unknownTargetEntity" type="UnknownTargetEntity" minOccurs="1" maxOccurs="1"/>
			<xs:element name="unsupportedAssociationQualifier" type="UnsupportedAssociationQualifier" minOccurs="1" maxOccurs="1"/>
			<xs:element name="unsupportedSubjectNamespaceName" type="UnsupportedSubjectNamespaceName" minOccurs="1" maxOccurs="1"/>
		</xs:sequence>
	</xs:complexType>
	<!-- End Maintenance Exceptions -->

</xs:schema>
