<!--************************************************************-->
<!--  draft_pstc_schemma_core_09.xsd                            -->
<!--                                                            -->
<!--  Draft core schema for SPML. Requires the DSMLv2 schema.   -->
<!--                                                            -->
<!--  Editors:                                                  -->
<!--    Jeff Bohren (jbohren@opennetwork.com)                   -->
<!--    Yoav Kirsch (Yoav.Kirsch@businesslayers.com)            -->
<!--                                                            -->
<!--                                                            -->
<!-- Copyright (C) The Organization for the Advancement of      -->
<!-- Structured Information Standards [OASIS] 2003. All Rights  -->
<!-- Reserved.                                                  -->
<!--************************************************************-->

<schema 	targetNamespace="urn:oasis:names:tc:SPML:1:0:core" 
		xmlns:spml="urn:oasis:names:tc:SPML:1:0:core"
		xmlns:xsd="http://www.w3.org/2001/XMLSchema"
		xmlns:dsml="urn:oasis:names:tc:DSML:2:0:core" 
		xmlns:saml="urn:oasis:names:tc:SAML:1.0:assertion"
		xmlns="http://www.w3.org/2001/XMLSchema"
		elementFormDefault="qualified">
	 
        <import namespace="urn:oasis:names:tc:DSML:2:0:core" 
        	schemaLocation="http://www.oasis-open.org/committees/dsml/docs/DSMLv2.xsd" />
	
	<import namespace="urn:oasis:names:tc:SAML:1.0:assertion" 
		schemaLocation="http://www.oasis-open.org/committees/security/docs/cs-sstc-schema-assertion-01.xsd"/>
	
	<xsd:complexType name="Attributes">
		<xsd:sequence>
			<xsd:element name="attr" type="dsml:DsmlAttr" minOccurs="0" maxOccurs="unbounded"/>
		</xsd:sequence>
	</xsd:complexType>  

	<xsd:complexType name="SpmlRequest">
		<xsd:complexContent>
			<xsd:extension base="dsml:DsmlMessage">
				<xsd:sequence>
					<xsd:element name="operationalAttributes" type="spml:Attributes" minOccurs="0" maxOccurs="1"/>
				</xsd:sequence>
			</xsd:extension>
		</xsd:complexContent>
	</xsd:complexType>

	<xsd:simpleType name="ResultCode">
		<xsd:restriction base="xsd:string">
			<xsd:enumeration value="urn:oasis:names:tc:SPML:1.0:core#success"/>
			<xsd:enumeration value="urn:oasis:names:tc:SPML:1.0:core#failure"/>
			<xsd:enumeration value="urn:oasis:names:tc:SPML:1.0:core#pending"/>
		</xsd:restriction>
	</xsd:simpleType>
	
	
	<xsd:complexType name="SpmlResponse">
		<xsd:complexContent>
			<xsd:extension base="dsml:DsmlMessage">
				<xsd:sequence>
					<xsd:element name="operationalAttributes" type="spml:Attributes" minOccurs="0" maxOccurs="1"/>
					<xsd:element name="errorMessage" type="xsd:string" minOccurs="0"/>
				</xsd:sequence>
				
				<xsd:attribute name="results" type="spml:ResultCode" use="required"/>

			</xsd:extension>
		</xsd:complexContent>
	</xsd:complexType>

	<xsd:simpleType name="IdentifierType">
		<xsd:restriction base="xsd:string">
			<xsd:enumeration value="urn:oasis:names:tc:SPML:1.0:core#EMailAddress"/>
			<xsd:enumeration value="urn:oasis:names:tc:SPML:1.0:core#DN"/>
			<xsd:enumeration value="urn:oasis:names:tc:SPML:1.0:core#UserIDAndOrDomainName"/>
			<xsd:enumeration value="urn:oasis:names:tc:SPML:1.0:core#LibertyUniqueID"/>
			<xsd:enumeration value="urn:oasis:names:tc:SPML:1.0:core#PassportUniqueID"/>
			<xsd:enumeration value="urn:oasis:names:tc:SPML:1.0:core#GUID"/>
			<xsd:enumeration value="urn:oasis:names:tc:SPML:1.0:core#URN"/>
			<xsd:enumeration value="urn:oasis:names:tc:SPML:1.0:core#GenericString"/>
			<xsd:enumeration value="urn:oasis:names:tc:SPML:1.0:core#SAMLSubject"/>
			<xsd:enumeration value="urn:oasis:names:tc:SPML:1.0:core#OID"/>
		</xsd:restriction>
	</xsd:simpleType>
	
	<xsd:complexType name="Identifier">
		<xsd:sequence>
			<xsd:choice>
				<xsd:element name="id" type="xsd:anyType" minOccurs="0"/>
				<xsd:element name="subject" type="saml:SubjectStatementAbstractType" minOccurs="0"/>
			</xsd:choice>
			<xsd:element name="attr" type="dsml:DsmlAttr" minOccurs="0" maxOccurs="unbounded"/>
		</xsd:sequence>
		<xsd:attribute name="type" type="spml:IdentifierType" use="required"/>
	</xsd:complexType>
	

	
	<xsd:complexType name="AddRequest">
		<xsd:complexContent>
			<xsd:extension base="spml:SpmlRequest">
				<xsd:sequence>
					<xsd:element name="identifier" type="spml:Identifier" minOccurs="0" maxOccurs="1"/>
					<xsd:element name="attributes" type="spml:Attributes" minOccurs="0" maxOccurs="unbounded"/>
				</xsd:sequence>
			</xsd:extension>
		</xsd:complexContent>
	</xsd:complexType>  
 
 	<xsd:complexType name="AddResponse">
 		<xsd:complexContent>
 			<xsd:extension base="spml:SpmlResponse">
 				<xsd:sequence>
 					<xsd:element name="identifier" type="spml:Identifier" minOccurs="0" maxOccurs="1"/>
					<xsd:element name="attributes" type="spml:Attributes" minOccurs="0" maxOccurs="unbounded"/>
 				</xsd:sequence>
 			</xsd:extension>
 		</xsd:complexContent>
	</xsd:complexType> 

	<xsd:complexType name="Modifications">
		<xsd:sequence>
			<xsd:element name="modification" type="dsml:DsmlModification" minOccurs="0" maxOccurs="unbounded"/>
		</xsd:sequence>
	</xsd:complexType>  

	<xsd:complexType name="ModifyRequest">
		<xsd:complexContent>
			<xsd:extension base="spml:SpmlRequest">
				<xsd:sequence>
					<xsd:element name="identifier" type="spml:Identifier" minOccurs="1" maxOccurs="1" />
					<xsd:element name="modifications" type="spml:Modifications" minOccurs="0" maxOccurs="unbounded"/>
				</xsd:sequence>
			</xsd:extension>
		</xsd:complexContent>
	</xsd:complexType>	
	

	<xsd:complexType name="ModifyResponse">
		<xsd:complexContent>
			<xsd:extension base="spml:SpmlRequest">
				<xsd:sequence>
					<xsd:element name="modifications" type="spml:Modifications" minOccurs="0" maxOccurs="unbounded"/>
				</xsd:sequence>
			</xsd:extension>
		</xsd:complexContent>
	</xsd:complexType>
	
	<xsd:complexType name="DeleteRequest">
		<xsd:complexContent>
			<xsd:extension base="spml:SpmlRequest">
				<xsd:sequence>
					<xsd:element name="identifier" type="spml:Identifier" minOccurs="1" maxOccurs="1" />
				</xsd:sequence>
			</xsd:extension>
		</xsd:complexContent>
	</xsd:complexType>

 	<xsd:complexType name="DeleteResponse">
 		<xsd:complexContent>
 			<xsd:extension base="spml:SpmlResponse">
 			</xsd:extension>
 		</xsd:complexContent>
	</xsd:complexType>
	
	
	<xsd:complexType name="SearchRequest">
		<xsd:complexContent>
			<xsd:extension base="spml:SpmlRequest">
				<xsd:sequence>
					<xsd:element name="searchBase" type="spml:Identifier" minOccurs="0" maxOccurs="1" />
					<xsd:element name="filter" type="dsml:Filter" minOccurs="0" maxOccurs="1" />
					<xsd:element name="attributes" type="dsml:AttributeDescriptions" minOccurs="0" maxOccurs="unbounded"/>
				</xsd:sequence>
			</xsd:extension>
		</xsd:complexContent>
	</xsd:complexType>  

	<xsd:complexType name="SearchResultEntry">
		<xsd:complexContent>
			<xsd:extension base="dsml:DsmlMessage">
				<xsd:sequence>
 					<xsd:element name="identifier" type="spml:Identifier" minOccurs="0" maxOccurs="1"/>
					<xsd:element name="attributes" type="spml:Attributes" minOccurs="0" maxOccurs="unbounded"/>
 				</xsd:sequence>
			</xsd:extension>
		</xsd:complexContent>
	</xsd:complexType>
 
 	<xsd:complexType name="SearchResponse">
 		<xsd:complexContent>
 			<xsd:extension base="spml:SpmlResponse">
 				<xsd:sequence>
 					<xsd:element name="searchResultEntry" type="spml:SearchResultEntry" minOccurs="0" maxOccurs="unbounded"/>
 				</xsd:sequence>
 			</xsd:extension>
 		</xsd:complexContent>
	</xsd:complexType> 

	<xsd:complexType name="ProviderIdentifier">
		<xsd:sequence>
			<xsd:element name="providerID" type="xsd:anyType" />
		</xsd:sequence>
		<xsd:attribute name="providerIDType" use="required">
			<xsd:simpleType>
				<xsd:restriction base="xsd:string">
					<xsd:enumeration value="urn:oasis:names:tc:SPML:1.0:core#URN"/>
					<xsd:enumeration value="urn:oasis:names:tc:SPML:1.0:core#OID"/>
				</xsd:restriction>
			</xsd:simpleType>
		</xsd:attribute>
	</xsd:complexType>
	                        
	<xsd:complexType name="OperationIdentifier">
		<xsd:sequence>
			<xsd:element name="operationID" type="xsd:anyType" />
		</xsd:sequence>

		<xsd:attribute name="operationIDType" use="required">
			<xsd:simpleType>
				<xsd:restriction base="xsd:string">
					<xsd:enumeration value="urn:oasis:names:tc:SPML:1.0:core#URN"/>
					<xsd:enumeration value="urn:oasis:names:tc:SPML:1.0:core#OID"/>
					<xsd:enumeration value="urn:oasis:names:tc:SPML:1.0:core#GenericString"/>
				</xsd:restriction>
			</xsd:simpleType>
		</xsd:attribute>
		
	</xsd:complexType>
	
	 
	<xsd:complexType name="ExtendedRequest">
		<xsd:complexContent>
			<xsd:extension base="spml:SpmlRequest">
				<xsd:sequence>
					<xsd:element name="providerIdentifier" type="spml:ProviderIdentifier" minOccurs="0" maxOccurs="1" />
					<xsd:element name="operationIdentifier" type="spml:OperationIdentifier" minOccurs="1" maxOccurs="1"/>
					<xsd:element name="identifier" type="spml:Identifier" minOccurs="0" maxOccurs="1"/>
					<xsd:element name="attributes" type="spml:Attributes" minOccurs="0" maxOccurs="unbounded"/>
				</xsd:sequence>
			</xsd:extension>
		</xsd:complexContent>
	</xsd:complexType>  
	 
	<xsd:complexType name="ExtendedResponse">
		<xsd:complexContent>
			<xsd:extension base="spml:SpmlResponse">
				<xsd:sequence>
					<xsd:element name="attributes" type="spml:Attributes" minOccurs="0" maxOccurs="unbounded"/>
				</xsd:sequence>
			</xsd:extension>
		</xsd:complexContent>
	</xsd:complexType>
	
</schema>

