<?xml version="1.0" encoding="UTF-8"?>
<schema
	targetNamespace="urn:oasis:names:tc:SAML:2.0:protocol"
	xmlns="http://www.w3.org/2001/XMLSchema"
	xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol"
	xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion"
	xmlns:ds="http://www.w3.org/2000/09/xmldsig#"
	elementFormDefault="unqualified"
	attributeFormDefault="unqualified"
    blockDefault="substitution"
	version="2.0">
	<import namespace="urn:oasis:names:tc:SAML:2.0:assertion"
		schemaLocation="draft-sstc-saml-schema-assertion-2.0-01.xsd"/>
    <import namespace="http://www.w3.org/2000/09/xmldsig#"
        schemaLocation="xmldsig-core-schema.xsd"/>
	<annotation>
		<documentation>
            Document identifier: draft-sstc-saml-schema-protocol-2.0-01
            Location: http://www.oasis-open.org/committees/documents.php?wg_abbrev=security
            Revision history:
              Updated the schema and namespace to V2.0.
		    Removed RespondWith and its corresponding type.
		    Added Issuer element, revamped protocol types, added RNI messages.
        </documentation>
	</annotation>
    <element name="RelayState" type="string"/>
	<complexType name="RequestAbstractType" abstract="true">
		<sequence>
    		<element ref="saml:Issuer" minOccurs="0"/>
    		<element ref="ds:Signature" minOccurs="0"/>
    		<element ref="samlp:RelayState" minOccurs="0"/>
		</sequence>
		<attribute name="RequestID" type="ID" use="required"/>
		<attribute name="MajorVersion" type="integer" use="required"/>
		<attribute name="MinorVersion" type="integer" use="required"/>
		<attribute name="IssueInstant" type="dateTime" use="required"/>
	</complexType>
    <complexType name="StatusResponseType">
    	<sequence>
    		<element ref="saml:Issuer" minOccurs="0"/>
    		<element ref="ds:Signature" minOccurs="0"/>
    		<element ref="samlp:RelayState" minOccurs="0"/>
    		<element ref="samlp:Status"/>
    	</sequence>
    	<attribute name="ResponseID" type="ID" use="required"/>
    	<attribute name="InResponseTo" type="NCName" use="optional"/>
    	<attribute name="MajorVersion" type="integer" use="required"/>
    	<attribute name="MinorVersion" type="integer" use="required"/>
    	<attribute name="IssueInstant" type="dateTime" use="required"/>
    	<attribute name="Recipient" type="anyURI" use="optional"/>
    </complexType>
	<element name="Status" type="samlp:StatusType"/>
	<complexType name="StatusType">
		<sequence>
			<element ref="samlp:StatusCode"/>
			<element ref="samlp:StatusMessage" minOccurs="0"/>
			<element ref="samlp:StatusDetail" minOccurs="0"/>
		</sequence>
	</complexType>
	<element name="StatusCode" type="samlp:StatusCodeType"/>
	<complexType name="StatusCodeType">
		<sequence>
			<element ref="samlp:StatusCode" minOccurs="0"/>
		</sequence>
		<attribute name="Value" type="QName" use="required"/>
	</complexType>
	<element name="StatusMessage" type="string"/>
	<element name="StatusDetail" type="samlp:StatusDetailType"/>
	<complexType name="StatusDetailType">
		<sequence>
			<any namespace="##any" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
		</sequence>
	</complexType>
    <element name="AssertionIDRequest" type="samlp:AssertionIDRequestType"/>
    <complexType name="AssertionIDRequestType">
    	<complexContent>
    		<extension base="samlp:RequestAbstractType">
    			<sequence>
    				<element ref="saml:AssertionIDReference" maxOccurs="unbounded"/>
    			</sequence>
    		</extension>
    	</complexContent>
    </complexType>
	<element name="AssertionArtifact" type="string"/>
    <element name="ArtifactRequest" type="samlp:ArtifactRequestType"/>
    <complexType name="ArtifactRequestType">
    	<complexContent>
    		<extension base="samlp:RequestAbstractType">
    			<sequence>
    				<element ref="samlp:AssertionArtifact" maxOccurs="unbounded"/>
    			</sequence>
    		</extension>
    	</complexContent>
    </complexType>
    <element name="SubjectQuery" type="samlp:SubjectQueryAbstractType"/>
    <complexType name="SubjectQueryAbstractType" abstract="true">
    	<complexContent>
    		<extension base="samlp:RequestAbstractType">
    			<sequence>
    				<element ref="saml:Subject"/>
    			</sequence>
    		</extension>
    	</complexContent>
    </complexType>
	<element name="AuthenticationQuery" type="samlp:AuthenticationQueryType"/>
	<complexType name="AuthenticationQueryType">
		<complexContent>
			<extension base="samlp:SubjectQueryAbstractType">
				<attribute name="AuthenticationMethod" type="anyURI"/>
			</extension>
		</complexContent>
	</complexType>
	<element name="AttributeQuery" type="samlp:AttributeQueryType"/>
	<complexType name="AttributeQueryType">
		<complexContent>
			<extension base="samlp:SubjectQueryAbstractType">
				<sequence>
					<element ref="saml:AttributeDesignator" minOccurs="0" maxOccurs="unbounded"/>
				</sequence>
				<attribute name="Resource" type="anyURI" use="optional"/>
			</extension>
		</complexContent>
	</complexType>
	<element name="AuthorizationDecisionQuery" type="samlp:AuthorizationDecisionQueryType"/>
	<complexType name="AuthorizationDecisionQueryType">
		<complexContent>
			<extension base="samlp:SubjectQueryAbstractType">
				<sequence>
					<element ref="saml:Action" maxOccurs="unbounded"/>
					<element ref="saml:Evidence" minOccurs="0"/>
				</sequence>
				<attribute name="Resource" type="anyURI" use="required"/>
			</extension>
		</complexContent>
	</complexType>
    <element name="Response" type="samlp:ResponseType"/>
    <complexType name="ResponseType">
    	<complexContent>
    		<extension base="samlp:StatusResponseType">
    			<sequence>
    				<element ref="saml:Assertion" minOccurs="0" maxOccurs="unbounded"/>
    			</sequence>
    		</extension>
    	</complexContent>
    </complexType>
	<element name="NewIdentifier" type="string"/>
    <element name="RegisterNameIdentifierRequest" type="samlp:RegisterNameIdentifierRequestType"/>
    <complexType name="RegisterNameIdentifierRequestType">
    	<complexContent>
    		<extension base="samlp:RequestAbstractType">
    			<sequence>
    				<element ref="saml:NameIdentifier"/>
    				<element ref="samlp:NewIdentifier"/>
    			</sequence>
    		</extension>
    	</complexContent>
    </complexType>
    <element name="RegisterNameIdentifierResponse" type="samlp:StatusResponseType"/>
</schema>
