<?xml version="1.0" encoding="UTF-8"?>
<xs:schema targetNamespace="http://www.docs.oasis-open.org/dss/oasis-dss-1.0-core-schema-cd-02.xsd" 
			xmlns:dss="http://www.docs.oasis-open.org/dss/oasis-dss-1.0-core-schema-cd-02.xsd" 
			xmlns:ds="http://www.w3.org/2000/09/xmldsig#"
			xmlns:xs="http://www.w3.org/2001/XMLSchema"
			xmlns:saml="urn:oasis:names:tc:SAML:1.0:assertion"
			elementFormDefault="qualified" 
			attributeFormDefault="unqualified">			

	<xs:import namespace="http://www.w3.org/2000/09/xmldsig#" schemaLocation="http://www.w3.org/TR/xmldsig-core/xmldsig-core-schema.xsd"/>
	<xs:import namespace="urn:oasis:names:tc:SAML:1.0:assertion" schemaLocation="http://www.oasis-open.org/committees/download.php/3408/oasis-sstc-saml-schema-protocol-1.1.xsd"/>
	<xs:import namespace="http://www.w3.org/XML/1998/namespace" schemaLocation="http://www.w3.org/2001/xml.xsd"/>			


	<!-- COMMON PROTOCOL STRUCTURES -->

	<xs:complexType name="AnyType">
		<xs:sequence>
			<xs:any processContents="lax" maxOccurs ="unbounded"/>
		</xs:sequence>
	</xs:complexType>
	
	<xs:complexType name="InternationalStringType">
		<xs:simpleContent>
			<xs:extension base="xs:string">
				<xs:attribute ref="xml:lang"/>
			</xs:extension>
		</xs:simpleContent>
	</xs:complexType>
		
	<xs:element name="InputDocuments">
		<xs:complexType>
			<xs:sequence>
				<xs:choice minOccurs="1" maxOccurs="unbounded">		
					<xs:element ref="dss:Document"/>
					<xs:element ref="dss:DocumentHash"/>
					<xs:any processContents="lax"/>					
				</xs:choice>
			</xs:sequence>
		</xs:complexType>
	</xs:element>
	
	<xs:complexType name="DocumentBaseType" abstract="true">
		<xs:sequence>
			<xs:element ref="ds:Transforms" minOccurs="0"/> 
			<xs:element name="Schema" type="xs:base64Binary" minOccurs="0"/>
		</xs:sequence>
		<xs:attribute name="ID" type="xs:ID" use="optional"/>
		<xs:attribute name="RefURI" type="xs:anyURI" use="optional"/>
		<xs:attribute name="RefType" type="xs:anyURI" use="optional"/>
	</xs:complexType>	


	<xs:element name="Document">
		<xs:complexType>
			<xs:complexContent>
				<xs:extension base="dss:DocumentBaseType">
					<xs:choice>
						<xs:element ref="dss:XMLData"/>
						<xs:element ref="dss:Base64Data"/>
					</xs:choice>
				</xs:extension>
			</xs:complexContent>
		</xs:complexType>
	</xs:element>

	<xs:element name="XMLData" type="dss:AnyType"/>

	<xs:element name="Base64Data">
		<xs:complexType>
			<xs:simpleContent>
				<xs:extension base="xs:base64Binary">
					<xs:attribute name="MimeType" type="xs:string" use="optional"/>
				</xs:extension>
			</xs:simpleContent>
		</xs:complexType>			
	</xs:element>
	
	<xs:element name="DocumentHash">
		<xs:complexType>
			<xs:complexContent>
				<xs:extension base="dss:DocumentBaseType">
					<xs:sequence>
						<xs:element ref="ds:DigestMethod"/>
						<xs:element ref="ds:DigestValue"/>
					</xs:sequence>
				</xs:extension>
			</xs:complexContent>
		</xs:complexType>
	</xs:element>
	
	<xs:element name="SignatureObject">
		<xs:complexType>
			<xs:sequence>
				<xs:choice>
					<xs:element ref="ds:Signature"/>
					<xs:element ref="dss:Timestamp"/>				
					<xs:element ref="dss:Base64Signature"/>
					<xs:element ref="dss:SignaturePtr"/>
					<xs:any processContents="lax"/>
				</xs:choice>
				<xs:element name="Schema" type="xs:base64Binary" minOccurs="0"/>
			</xs:sequence>
		</xs:complexType>
	</xs:element>

	<xs:element name="Base64Signature">
		<xs:complexType>
			<xs:simpleContent>
				<xs:extension base="xs:base64Binary">
					<xs:attribute name="Type" type="xs:anyURI"/>
				</xs:extension>
			</xs:simpleContent>
		</xs:complexType>
	</xs:element>

	<xs:element name="SignaturePtr">
		<xs:complexType>
			<xs:attribute name="WhichDocument" type="xs:IDREF"/>             
			<xs:attribute name="XPath" type="xs:string" use="optional"/>             
		 </xs:complexType>
	</xs:element>

	<xs:element name="Result">
		<xs:complexType>
			<xs:sequence>
				<xs:element name="ResultMajor" type="xs:anyURI"/>
				<xs:element name="ResultMinor" type="xs:anyURI" minOccurs="0"/>
				<xs:element name="ResultMessage" type="dss:InternationalStringType" minOccurs="0"/>
			</xs:sequence>
		</xs:complexType>
	</xs:element>	
	
	<xs:element name="OptionalInputs" type="dss:AnyType"/>
	
	<xs:element name="OptionalOutputs" type="dss:AnyType"/>

	<xs:element name="ServicePolicy" type="xs:anyURI"/>
	
	<xs:element name="ClaimedIdentity">
		<xs:complexType>
			<xs:sequence>
				<xs:element name="Name" type="saml:NameIdentifierType"/>
				<xs:element name="SupportingInfo" type="dss:AnyType"           
							minOccurs="0"/>
			</xs:sequence>
		</xs:complexType>
	</xs:element>

	
	<xs:element name="Language" type="xs:language"/>
	
	<xs:element name="AdditionalProfile" type="xs:anyURI"/>
	
	<!-- COMMON PROTOCOL STRUCTURES -->

	<!-- PROTOCOL MESSAGES BEGIN -->

 	<xs:element name="SignRequest">
		<xs:complexType>
			<xs:sequence>
				<xs:element ref="dss:OptionalInputs" minOccurs="0"/>
				<xs:element ref="dss:InputDocuments"/>
			</xs:sequence>
			<xs:attribute name="RequestID" type="xs:string" use="optional"/>
			<xs:attribute name="Profile" type="xs:anyURI" use="optional"/>			
		</xs:complexType>
	</xs:element>	
	
	<xs:element name="SignResponse">
		<xs:complexType>
			<xs:sequence>
				<xs:element ref="dss:Result"/>
				<xs:element ref="dss:OptionalOutputs" minOccurs="0"/>
				<xs:element ref="dss:SignatureObject" minOccurs="0"/>
			</xs:sequence>
			<xs:attribute name="RequestID" type="xs:string" use="optional"/>
			<xs:attribute name="Profile" type="xs:anyURI" use="required"/>
		</xs:complexType>
	</xs:element>
	
	<xs:element name="VerifyRequest">
		<xs:complexType>
			<xs:sequence>
				<xs:element ref="dss:OptionalInputs" minOccurs="0"/>
				<xs:element ref="dss:SignatureObject" minOccurs="0"/>
				<xs:element ref="dss:InputDocuments" minOccurs="0"/>
			</xs:sequence>
			<xs:attribute name="RequestID" type="xs:string" use="optional"/>
			<xs:attribute name="Profile" type="xs:anyURI" use="optional"/>
		</xs:complexType>
	</xs:element>

	<xs:element name="VerifyResponse">
		<xs:complexType>
			<xs:sequence>
				<xs:element ref="dss:Result"/>
				<xs:element ref="dss:OptionalOutputs" minOccurs="0"/>
			</xs:sequence>
			<xs:attribute name="RequestID" type="xs:string" use="optional"/>
			<xs:attribute name="Profile" type="xs:anyURI" use="required"/>			
		</xs:complexType>
	</xs:element>
	
	<!-- PROTOCOL MESSAGES END -->	
	
	<!-- SIGNREQUEST OPTIONAL INPUTS START -->	

	<xs:element name="SignatureType" type="xs:anyURI"/>
	
	<xs:element name="AddTimestamp">
	    <xs:complexType>
	        <xs:attribute name="Type" type="xs:anyURI" use="optional"/>
	    </xs:complexType>
	</xs:element>

	<xs:element name="IntendedAudience">
		<xs:complexType>	
			<xs:sequence>
				<xs:element name="Recipient" type="saml:NameIdentifierType" maxOccurs="unbounded"/> 
			</xs:sequence>
  		</xs:complexType>	
	</xs:element>	

	<xs:element name="KeySelector">
		<xs:complexType>
			<xs:choice>
				<xs:element ref="ds:KeyInfo"/>
            	<xs:any processContents="lax"/>				
			</xs:choice>
		</xs:complexType>
	</xs:element>
	
	<xs:element name="SignedReferences">
		<xs:complexType>
			<xs:sequence>
				<xs:element ref="dss:SignedReference" maxOccurs="unbounded"/>
			</xs:sequence>
		</xs:complexType>
	</xs:element>

		<xs:element name="SignedReference">
			<xs:complexType>
				<xs:sequence>
					<xs:element ref="ds:Transforms" minOccurs="0"/>
				</xs:sequence>
				<xs:attribute name="WhichDocument" type="xs:IDREF" use="required"/>
				<xs:attribute name="RefId" type="xs:string" use="optional"/>		
			</xs:complexType>
		</xs:element>
	
	<xs:element name="Properties">
		<xs:complexType>
			<xs:sequence>
				<xs:element name="SignedProperties" type="dss:PropertiesType" minOccurs="0"/>
				<xs:element name="UnsignedProperties" type="dss:PropertiesType" minOccurs="0"/>
			</xs:sequence>
		</xs:complexType>
	</xs:element>
	
		<xs:complexType name="PropertiesType">
			<xs:sequence>
				<xs:element ref="dss:Property" maxOccurs="unbounded"/>
			</xs:sequence>
		</xs:complexType>

		<xs:element name="Property">
			<xs:complexType>
				<xs:sequence>
					<xs:element name="Identifier" type="xs:anyURI"/>
					<xs:element name="Value" type="dss:AnyType" minOccurs="0"/>
				</xs:sequence>
			</xs:complexType>
		</xs:element>
		
	<xs:element name="SignaturePlacement">
		<xs:complexType>
			<xs:choice>
				<xs:element name="XPathAfter" type="xs:string"/>
				<xs:element name="XPathFirstChildOf" type="xs:string"/>			
			</xs:choice>
			<xs:attribute name="WhichDocument" type="xs:IDREF"/>             
		</xs:complexType>
	</xs:element>		
	
	<xs:element name="EnvelopingSignature">
	    <xs:complexType>
	        <xs:attribute name="WhichDocument" type="xs:IDREF"/>
	    </xs:complexType>
	</xs:element>
			
	<!-- SIGNREQUEST OPTIONAL INPUTS END -->
	
	<!-- SIGNRESPONSE OPTIONAL OUTPUTS START -->

	<xs:element name="DocumentWithSignature">
		<xs:complexType>
			<xs:sequence>
				<xs:element ref="dss:Document"/>
			</xs:sequence>
		</xs:complexType>
	</xs:element>
	
	<!-- SIGNRESPONSE OPTIONAL OUTPUTS END -->
	
	<!-- VERIFYREQUEST OPTIONAL INPUTS START -->
	
	<xs:element name="VerifyManifests"/>
	
	<xs:element name="VerificationTime" type="xs:dateTime"/>
	
	<xs:element name="AdditionalKeyInfo">
		<xs:complexType>
			<xs:sequence>
				<xs:element ref="ds:KeyInfo"/>
			</xs:sequence>
		</xs:complexType>	
	</xs:element>

	<xs:element name="ReturnProcessingDetails"/>
	
	<xs:element name="ReturnSigningTime"/>
	
	<xs:element name="ReturnTimestampTime"/>
	
	<xs:element name="ReturnSignerIdentity"/>
	
	<xs:element name="ReturnUpdatedSignature">
	    <xs:complexType>
	        <xs:attribute name="Type" type="xs:anyURI" use="optional"/>
	    </xs:complexType>
	</xs:element>
	
	<xs:element name="ReturnTransformedDocument">
		<xs:complexType>
			<xs:attribute name="WhichReference" type="xs:integer" use="required"/>
		</xs:complexType>
	</xs:element>
	
	<!-- VERIFYREQUEST OPTIONAL INPUTS END -->
	
	<!-- VERIFYRESPONSE OPTIONAL OUTPUTS START -->

	<xs:element name="ProcessingDetails">
		<xs:complexType>
			<xs:sequence>
				<xs:element name="ValidDetail" type="dss:DetailType" minOccurs="0" maxOccurs="unbounded"/>
				<xs:element name="IndeterminateDetail" type="dss:DetailType" minOccurs="0" maxOccurs="unbounded"/>
				<xs:element name="InvalidDetail" type="dss:DetailType" minOccurs="0" maxOccurs="unbounded"/>
			</xs:sequence>
	  </xs:complexType>
	</xs:element>
	
		<xs:complexType name="DetailType">
				<xs:sequence>
					<xs:element name="Code" type="xs:anyURI" minOccurs="0"/>
					<xs:element name="Message" type="dss:InternationalStringType" minOccurs="0"/>
					<xs:any processContents="lax" minOccurs="0" maxOccurs ="unbounded"/>
				</xs:sequence>		
				<xs:attribute name="Type" type="xs:anyURI" use="required"/>
		</xs:complexType>

	<xs:element name="SigningTime">
		<xs:complexType>
			<xs:simpleContent>
				<xs:extension base="xs:dateTime">
					<xs:attribute name="ThirdPartyTimestamp" type="xs:boolean" use="required"/>
				</xs:extension>
			</xs:simpleContent>
		</xs:complexType>
	</xs:element>	
	
	<xs:element name="TimestampTime" type="xs:dateTime"/>
	
	<xs:element name="SignerIdentity" type="saml:NameIdentifierType"/>
	
	<xs:element name="UpdatedSignature">
		<xs:complexType>
			<xs:sequence>
				<xs:element ref="dss:SignatureObject"/>
			</xs:sequence>			
			<xs:attribute name="Type" type="xs:anyURI" use="optional"/>
		</xs:complexType>
	</xs:element>		
	
	<xs:element name="TransformedDocument">
		<xs:complexType>
			<xs:sequence>
				<xs:element ref="dss:XMLData"/>
			</xs:sequence>
			<xs:attribute name="WhichReference" type="xs:integer" use="required"/>			
		</xs:complexType>	
	</xs:element>
	
	<!-- VERIFYRESPONSE OPTIONAL OUTPUTS END -->
		
	<!-- TIMESTAMP BEGIN -->	

	<xs:element name="Timestamp">
		<xs:complexType>
			<xs:choice>  
				<xs:element ref="ds:Signature"/>
				<xs:element name="RFC3161TimeStampToken" type="xs:base64Binary"/>
				<xs:any processContents="lax"/>
			</xs:choice>		
		</xs:complexType>   
	</xs:element>
	
	<xs:element name="TstInfo">
		<xs:complexType>
			<xs:sequence>
				<xs:element name="SerialNumber" type="xs:integer"/>
				<xs:element name="CreationTime" type="xs:dateTime"/>
				<xs:element name="Policy" type="xs:anyURI" minOccurs="0"/>
				<xs:element name="ErrorBound" type="xs:duration" minOccurs="0"/>
				<xs:element name="Ordered" type="xs:boolean" default="false" minOccurs="0"/>
				<xs:element name="TSA" type="saml:NameIdentifierType" minOccurs="0"/>
			</xs:sequence>				
		</xs:complexType>
	</xs:element>

	<!-- TIMESTAMP END -->

	<!-- REQUESTER IDENTITY BEGIN -->
	
	<xs:element name="RequesterIdentity">
	    <xs:complexType>
	        <xs:sequence>
	            <xs:element name="Name" type="saml:NameIdentifierType"/>
	            <xs:element name="SupportingInfo" type="dss:AnyType" minOccurs="0"/>
	        </xs:sequence>
	    </xs:complexType>
	</xs:element>	
	
	<!-- REQUESTER IDENTITY END -->
	
</xs:schema>

