<?xml version="1.0"?>
<!DOCTYPE schema [
  <!--  The URI for the XKMS namespace, and also the base URI used for
        URI's defined by the specification. -->
  <!ENTITY xkms 'http://www.w3.org/2002/03/xkms#'>
]>
<schema xmlns:xkms="http://www.w3.org/2002/03/xkms#"
 xmlns:ds="http://www.w3.org/2000/09/xmldsig#"
 xmlns:xenc="http://www.w3.org/2001/04/xmlenc#"
 xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.w3.org/2002/03/xkms#" elementFormDefault="qualified" attributeFormDefault="unqualified">
<import namespace="http://www.w3.org/2000/09/xmldsig#" schemaLocation="xmldsig-core-schema.xsd"></import>
<import namespace="http://www.w3.org/2001/04/xmlenc#" schemaLocation="xenc-schema.xsd"></import>
<annotation>
<documentation xml:lang="en">
   XML Schema for XKMS 2.0 Recommendation
</documentation></annotation>
<!-- /Namespace -->
<!-- MessageAbstractType -->
<complexType name="MessageAbstractType" abstract="true">
<sequence>
<element ref="ds:Signature" minOccurs="0"></element>
<element ref="xkms:MessageExtension" minOccurs="0" maxOccurs="unbounded"></element>
<element ref="xkms:OpaqueClientData" minOccurs="0"></element></sequence>
<attribute name="Id" type="ID" use="required"></attribute>
<attribute name="Service" type="anyURI" use="required"></attribute>
<attribute name="Nonce" type="base64Binary" use="optional"></attribute></complexType>
<!-- /MessageAbstractType -->
<!-- MessageExtension -->
<element name="MessageExtension" type="xkms:MessageExtensionAbstractType" abstract="true"></element>
<complexType name="MessageExtensionAbstractType" abstract="true"></complexType>
<!-- /MessageExtension -->
<!-- OpaqueClientData -->
<element name="OpaqueClientData" type="xkms:OpaqueClientDataType"></element>
<complexType name="OpaqueClientDataType">
<sequence maxOccurs="unbounded">
<element ref="xkms:OpaqueData" minOccurs="0"></element></sequence></complexType>
<element name="OpaqueData" type="base64Binary"></element>
<!-- /OpaqueClientData -->
<!-- RequestAbstractType -->
<complexType name="RequestAbstractType" abstract="true">
<complexContent>
<extension base="xkms:MessageAbstractType">
<sequence>
<element ref="xkms:ResponseMechanism" minOccurs="0" maxOccurs="unbounded"></element>
<element ref="xkms:RespondWith" minOccurs="0" maxOccurs="unbounded"></element>
<element ref="xkms:PendingNotification" minOccurs="0"></element></sequence>
<attribute name="OriginalRequestId" type="NCName" use="optional"></attribute>
<attribute name="ResponseLimit" type="integer" use="optional"></attribute></extension></complexContent></complexType>
<!-- /RequestAbstractType -->
<!-- ResponseMechanism -->
<simpleType name="ResponseMechanismEnum">
<restriction base="anyURI">
<enumeration value="http://www.w3.org/2002/03/xkms#Pending"></enumeration>
<enumeration value="http://www.w3.org/2002/03/xkms#Represent"></enumeration>
<enumeration value="http://www.w3.org/2002/03/xkms#RequestSignatureValue"></enumeration></restriction></simpleType>
<simpleType name="ResponseMechanismOpenEnum">
<union memberTypes="xkms:ResponseMechanismEnum anyURI"></union></simpleType>
<element name="ResponseMechanism" type="xkms:ResponseMechanismOpenEnum"></element>
<!-- /ResponseMechanism -->
<!-- RespondWith -->
<simpleType name="RespondWithEnum">
<restriction base="anyURI">
<enumeration value="http://www.w3.org/2002/03/xkms#KeyName"></enumeration>
<enumeration value="http://www.w3.org/2002/03/xkms#KeyValue"></enumeration>
<enumeration value="http://www.w3.org/2002/03/xkms#X509Cert"></enumeration>
<enumeration value="http://www.w3.org/2002/03/xkms#X509Chain"></enumeration>
<enumeration value="http://www.w3.org/2002/03/xkms#X509CRL"></enumeration>
<enumeration value="http://www.w3.org/2002/03/xkms#RetrievalMethod"></enumeration>
<enumeration value="http://www.w3.org/2002/03/xkms#PGP"></enumeration>
<enumeration value="http://www.w3.org/2002/03/xkms#PGPWeb"></enumeration>
<enumeration value="http://www.w3.org/2002/03/xkms#SPKI"></enumeration>
<enumeration value="http://www.w3.org/2002/03/xkms#PrivateKey"></enumeration></restriction></simpleType>
<simpleType name="RespondWithOpenEnum">
<union memberTypes="xkms:RespondWithEnum anyURI"></union></simpleType>
<element name="RespondWith" type="xkms:RespondWithOpenEnum"></element>
<!-- /RespondWith -->
<!-- PendingNotification -->
<element name="PendingNotification" type="xkms:PendingNotificationType"></element>
<complexType name="PendingNotificationType">
<attribute name="Mechanism" type="anyURI" use="required"></attribute>
<attribute name="Identifier" type="anyURI" use="required"></attribute></complexType>
<!-- /PendingNotification -->
<!-- PendingRequest -->
<element name="PendingRequest" type="xkms:PendingRequestType"></element>
<complexType name="PendingRequestType">
<complexContent>
<extension base="xkms:RequestAbstractType">
<attribute name="ResponseId" type="NCName" use="required"></attribute></extension></complexContent></complexType>
<!-- /PendingRequest -->
<!-- ResultType -->
<element name="Result" type="xkms:ResultType"></element>
<simpleType name="ResultMajorEnum">
<restriction base="anyURI">
<enumeration value="http://www.w3.org/2002/03/xkms#Success"></enumeration>
<enumeration value="http://www.w3.org/2002/03/xkms#VersionMismatch"></enumeration>
<enumeration value="http://www.w3.org/2002/03/xkms#Sender"></enumeration>
<enumeration value="http://www.w3.org/2002/03/xkms#Receiver"></enumeration>
<enumeration value="http://www.w3.org/2002/03/xkms#Represent"></enumeration>
<enumeration value="http://www.w3.org/2002/03/xkms#Pending"></enumeration></restriction></simpleType>
<simpleType name="ResultMajorOpenEnum">
<union memberTypes="xkms:ResultMajorEnum anyURI"></union></simpleType>
<simpleType name="ResultMinorEnum">
<restriction base="anyURI">
<enumeration value="http://www.w3.org/2002/03/xkms#NoMatch"></enumeration>
<enumeration value="http://www.w3.org/2002/03/xkms#TooManyResponses"></enumeration>
<enumeration value="http://www.w3.org/2002/03/xkms#Incomplete"></enumeration>
<enumeration value="http://www.w3.org/2002/03/xkms#Failure"></enumeration>
<enumeration value="http://www.w3.org/2002/03/xkms#Refused"></enumeration>
<enumeration value="http://www.w3.org/2002/03/xkms#NoAuthentication"></enumeration>
<enumeration value="http://www.w3.org/2002/03/xkms#MessageNotSupported"></enumeration>
<enumeration value="http://www.w3.org/2002/03/xkms#UnknownResponseId"></enumeration>
<enumeration value="http://www.w3.org/2002/03/xkms#RepresentRequired"></enumeration>
<enumeration value="http://www.w3.org/2002/03/xkms#NotSynchronous"></enumeration>
<enumeration value="http://www.w3.org/2002/03/xkms#OptionalElementNotSupported"></enumeration>
<enumeration value="http://www.w3.org/2002/03/xkms#ProofOfPossessionRequired"></enumeration>
<enumeration value="http://www.w3.org/2002/03/xkms#TimeInstantNotSupported"></enumeration>
<enumeration value="http://www.w3.org/2002/03/xkms#TimeInstantOutOfRange"></enumeration>

</restriction></simpleType>
<simpleType name="ResultMinorOpenEnum">
<union memberTypes="xkms:ResultMinorEnum anyURI"></union></simpleType>
<complexType name="ResultType">
<complexContent>
<extension base="xkms:MessageAbstractType">
<sequence>
<element ref="xkms:RequestSignatureValue" minOccurs="0"></element></sequence>
<attribute name="ResultMajor" type="xkms:ResultMajorOpenEnum" use="required"></attribute>
<attribute name="ResultMinor" type="xkms:ResultMinorOpenEnum" use="optional"></attribute>
<attribute name="RequestId" type="NCName" use="optional"></attribute></extension></complexContent></complexType>
<!-- /ResultType -->
<!-- RequestSignatureValue -->
<element name="RequestSignatureValue" type="ds:SignatureValueType"></element>
<!-- /RequestSignatureValue -->
<!-- CompoundRequest -->
<element name="CompoundRequest" type="xkms:CompoundRequestType"></element>
<complexType name="CompoundRequestType">
<complexContent>
<extension base="xkms:RequestAbstractType">
<choice maxOccurs="unbounded">
<element ref="xkms:LocateRequest"></element>
<element ref="xkms:ValidateRequest"></element>
<element ref="xkms:RegisterRequest"></element>
<element ref="xkms:ReissueRequest"></element>
<element ref="xkms:RecoverRequest"></element>
<element ref="xkms:RevokeRequest"></element></choice></extension></complexContent></complexType>
<!-- /CompoundRequest -->
<!-- CompoundResult -->
<element name="CompoundResult" type="xkms:CompoundResultType"></element>
<complexType name="CompoundResultType">
<complexContent>
<extension base="xkms:ResultType">
<choice minOccurs="0" maxOccurs="unbounded">
<element ref="xkms:LocateResult"></element>
<element ref="xkms:ValidateResult"></element>
<element ref="xkms:RegisterResult"></element>
<element ref="xkms:ReissueResult"></element>
<element ref="xkms:RecoverResult"></element>
<element ref="xkms:RevokeResult"></element></choice></extension></complexContent></complexType>
<!-- /CompoundResult -->
<!-- StatusRequest -->
<element name="StatusRequest" type="xkms:StatusRequestType"></element>
<complexType name="StatusRequestType">
<complexContent>
<extension base="xkms:PendingRequestType"></extension></complexContent></complexType>
<!-- /StatusRequest -->
<!-- StatusResult -->
<element name="StatusResult" type="xkms:StatusResultType"></element>
<complexType name="StatusResultType">
<complexContent>
<extension base="xkms:ResultType">
<attribute name="Success" type="integer" use="optional"></attribute>
<attribute name="Failure" type="integer" use="optional"></attribute>
<attribute name="Pending" type="integer" use="optional"></attribute></extension></complexContent></complexType>
<!-- /StatusResult -->
<!-- KeyBindingAbstractType-->
<complexType name="KeyBindingAbstractType" abstract="true">
<sequence>
<element ref="ds:KeyInfo" minOccurs="0"></element>
<element ref="xkms:KeyUsage" minOccurs="0" maxOccurs="3"></element>
<element ref="xkms:UseKeyWith" minOccurs="0" maxOccurs="unbounded"></element></sequence>
<attribute name="Id" type="ID" use="optional"></attribute></complexType>
<!-- /KeyBindingAbstractType-->
<!-- UnverifiedKeyBinding -->
<element name="UnverifiedKeyBinding" type="xkms:UnverifiedKeyBindingType"></element>
<complexType name="UnverifiedKeyBindingType">
<complexContent>
<extension base="xkms:KeyBindingAbstractType">
<sequence>
<element ref="xkms:ValidityInterval" minOccurs="0"></element></sequence></extension></complexContent></complexType>
<!-- /UnverifiedKeyBinding -->
<!-- KeyBinding -->
<element name="KeyBinding" type="xkms:KeyBindingType"></element>
<complexType name="KeyBindingType">
<complexContent>
<extension base="xkms:UnverifiedKeyBindingType">
<sequence>
<element ref="xkms:Status"></element></sequence></extension></complexContent></complexType>
<!-- /KeyBinding -->
<!-- KeyUsage -->
<simpleType name="KeyUsageEnum">
<restriction base="anyURI">
<enumeration value="http://www.w3.org/2002/03/xkms#Encryption"></enumeration>
<enumeration value="http://www.w3.org/2002/03/xkms#Signature"></enumeration>
<enumeration value="http://www.w3.org/2002/03/xkms#Exchange"></enumeration></restriction></simpleType>
<element name="KeyUsage" type="xkms:KeyUsageEnum"></element>
<!-- /KeyUsage -->
<!-- UseKeyWith -->
<element name="UseKeyWith" type="xkms:UseKeyWithType"></element>
<complexType name="UseKeyWithType">
<attribute name="Application" type="anyURI" use="required"></attribute>
<attribute name="Identifier" type="string" use="required"></attribute></complexType>
<!-- /UseKeyWith -->
<!-- Status -->
<element name="Status" type="xkms:StatusType"></element>
<complexType name="StatusType">
<sequence>
<element ref="xkms:ValidReason" minOccurs="0" maxOccurs="unbounded"></element>
<element ref="xkms:IndeterminateReason" minOccurs="0" maxOccurs="unbounded"></element>
<element ref="xkms:InvalidReason" minOccurs="0" maxOccurs="unbounded"></element></sequence>
<attribute name="StatusValue" type="xkms:KeyBindingEnum" use="required"></attribute></complexType>
<simpleType name="KeyBindingEnum">
<restriction base="anyURI">
<enumeration value="http://www.w3.org/2002/03/xkms#Valid"></enumeration>
<enumeration value="http://www.w3.org/2002/03/xkms#Invalid"></enumeration>
<enumeration value="http://www.w3.org/2002/03/xkms#Indeterminate"></enumeration></restriction></simpleType>
<!-- /Status -->
<!-- Reason -->
<simpleType name="ReasonEnum">
<restriction base="anyURI">
<enumeration value="http://www.w3.org/2002/03/xkms#IssuerTrust"></enumeration>
<enumeration value="http://www.w3.org/2002/03/xkms#RevocationStatus"></enumeration>
<enumeration value="http://www.w3.org/2002/03/xkms#ValidityInterval"></enumeration>
<enumeration value="http://www.w3.org/2002/03/xkms#Signature"></enumeration></restriction></simpleType>
<simpleType name="ReasonOpenEnum">
<union memberTypes="xkms:ReasonEnum anyURI"></union></simpleType>
<element name="ValidReason" type="xkms:ReasonOpenEnum"></element>
<element name="InvalidReason" type="xkms:ReasonOpenEnum"></element>
<element name="IndeterminateReason" type="xkms:ReasonOpenEnum"></element>
<!-- /Reason -->
<!-- ValidityInterval -->
<element name="ValidityInterval" type="xkms:ValidityIntervalType"></element>
<complexType name="ValidityIntervalType">
<attribute name="NotBefore" type="dateTime" use="optional"></attribute>
<attribute name="NotOnOrAfter" type="dateTime" use="optional"></attribute></complexType>
<!-- /ValidityInterval -->
<!-- QueryKeyBinding -->
<element name="QueryKeyBinding" type="xkms:QueryKeyBindingType"></element>
<complexType name="QueryKeyBindingType">
<complexContent>
<extension base="xkms:KeyBindingAbstractType">
<sequence>
<element ref="xkms:TimeInstant" minOccurs="0"></element></sequence></extension></complexContent></complexType>
<!-- /QueryKeyBinding -->
<!-- TimeInstant -->
<element name="TimeInstant" type="xkms:TimeInstantType"></element>
<complexType name="TimeInstantType">
<attribute name="Time" type="dateTime" use="required"></attribute></complexType>
<!-- /TimeInstant -->
<!-- PrototypeKeyBinding -->
<element name="PrototypeKeyBinding" type="xkms:PrototypeKeyBindingType"></element>
<complexType name="PrototypeKeyBindingType">
<complexContent>
<extension base="xkms:KeyBindingAbstractType">
<sequence>
<element ref="xkms:ValidityInterval" minOccurs="0"></element>
<element ref="xkms:RevocationCodeIdentifier" minOccurs="0"></element></sequence></extension></complexContent></complexType>
<!-- /PrototypeKeyBinding -->
<!-- RevocationCodeIdentifier -->
<element name="RevocationCodeIdentifier" type="xkms:RevocationCodeIdentifierType"></element>
<simpleType name="RevocationCodeIdentifierType">
<restriction base="base64Binary"></restriction></simpleType>
<!-- /RevocationCodeIdentifier -->
<!-- LocateRequest -->
<element name="LocateRequest" type="xkms:LocateRequestType"></element>
<complexType name="LocateRequestType">
<complexContent>
<extension base="xkms:RequestAbstractType">
<sequence>
<element ref="xkms:QueryKeyBinding"></element></sequence></extension></complexContent></complexType>
<!-- /LocateRequest -->
<!-- LocateResult -->
<element name="LocateResult" type="xkms:LocateResultType"></element>
<complexType name="LocateResultType">
<complexContent>
<extension base="xkms:ResultType">
<sequence>
<element ref="xkms:UnverifiedKeyBinding" minOccurs="0" maxOccurs="unbounded"></element></sequence></extension></complexContent></complexType>
<!-- /LocateResult -->
<!-- ValidateRequest -->
<element name="ValidateRequest" type="xkms:ValidateRequestType"></element>
<complexType name="ValidateRequestType">
<complexContent>
<extension base="xkms:RequestAbstractType">
<sequence>
<element ref="xkms:QueryKeyBinding"></element></sequence></extension></complexContent></complexType>
<!-- /ValidateRequest -->
<!-- ValidateResult -->
<element name="ValidateResult" type="xkms:ValidateResultType"></element>
<complexType name="ValidateResultType">
<complexContent>
<extension base="xkms:ResultType">
<sequence>
<element ref="xkms:KeyBinding" minOccurs="0" maxOccurs="unbounded"></element></sequence></extension></complexContent></complexType>
<!-- /ValidateResult -->
<!-- Authentication -->
<element name="Authentication" type="xkms:AuthenticationType"></element>
<complexType name="AuthenticationType">
<sequence>
<element ref="xkms:KeyBindingAuthentication" minOccurs="0"></element>
<element ref="xkms:NotBoundAuthentication" minOccurs="0"></element></sequence></complexType>
<!-- /Authentication -->
<!-- KeyBindingAuthentication -->
<element name="KeyBindingAuthentication" type="xkms:KeyBindingAuthenticationType"></element>
<complexType name="KeyBindingAuthenticationType">
<sequence>
<element ref="ds:Signature"></element></sequence></complexType>
<!-- /KeyBindingAuthentication -->
<!-- NotBoundAuthentication -->
<element name="NotBoundAuthentication" type="xkms:NotBoundAuthenticationType"></element>
<complexType name="NotBoundAuthenticationType">
<attribute name="Protocol" type="anyURI" use="required"></attribute>
<attribute name="Value" type="base64Binary" use="required"></attribute></complexType>
<!-- /NotBoundAuthentication -->
<!-- ProofOfPossession -->
<element name="ProofOfPossession" type="xkms:ProofOfPossessionType"></element>
<complexType name="ProofOfPossessionType">
<sequence>
<element ref="ds:Signature"></element></sequence></complexType>
<!-- /ProofOfPossession -->
<!-- PrivateKey -->
<element name="PrivateKey" type="xkms:PrivateKeyType"></element>
<complexType name="PrivateKeyType">
<sequence>
<element ref="xenc:EncryptedData"></element></sequence></complexType>
<!-- /PrivateKey -->
<!-- RegisterRequest -->
<element name="RegisterRequest" type="xkms:RegisterRequestType"></element>
<complexType name="RegisterRequestType">
<complexContent>
<extension base="xkms:RequestAbstractType">
<sequence>
<element ref="xkms:PrototypeKeyBinding"></element>
<element ref="xkms:Authentication"></element>
<element ref="xkms:ProofOfPossession" minOccurs="0"></element></sequence></extension></complexContent></complexType>
<!-- /RegisterRequest -->
<!-- RegisterResult -->
<element name="RegisterResult" type="xkms:RegisterResultType"></element>
<complexType name="RegisterResultType">
<complexContent>
<extension base="xkms:ResultType">
<sequence>
<element ref="xkms:KeyBinding" minOccurs="0" maxOccurs="unbounded"></element>
<element ref="xkms:PrivateKey" minOccurs="0"></element></sequence></extension></complexContent></complexType>
<!-- /RegisterResult -->
<!-- ReissueRequest -->
<element name="ReissueRequest" type="xkms:ReissueRequestType"></element>
<complexType name="ReissueRequestType">
<complexContent>
<extension base="xkms:RequestAbstractType">
<sequence>
<element ref="xkms:ReissueKeyBinding"></element>
<element ref="xkms:Authentication"></element>
<element ref="xkms:ProofOfPossession" minOccurs="0"></element></sequence></extension></complexContent></complexType>
<element name="ReissueKeyBinding" type="xkms:KeyBindingType"></element>
<!-- /ReissueRequest -->
<!-- ReissueResult -->
<element name="ReissueResult" type="xkms:ReissueResultType"></element>
<complexType name="ReissueResultType">
<complexContent>
<extension base="xkms:ResultType">
<sequence>
<element ref="xkms:KeyBinding" minOccurs="0" maxOccurs="unbounded"></element></sequence></extension></complexContent></complexType>
<!-- /ReissueResult -->
<!-- RevokeRequest -->
<element name="RevokeRequest" type="xkms:RevokeRequestType"></element>
<complexType name="RevokeRequestType">
<complexContent>
<extension base="xkms:RequestAbstractType">
<sequence>
<element ref="xkms:RevokeKeyBinding"></element>
<choice>
<element ref="xkms:Authentication"></element>
<element ref="xkms:RevocationCode"></element></choice></sequence></extension></complexContent></complexType>
<element name="RevokeKeyBinding" type="xkms:KeyBindingType"></element>
<!-- /RevokeRequest -->
<!-- RevocationCode -->
<element name="RevocationCode" type="xkms:RevocationCodeType"></element>
<simpleType name="RevocationCodeType">
<restriction base="base64Binary"></restriction></simpleType>
<!-- /RevocationCode -->
<!-- RevokeResult -->
<element name="RevokeResult" type="xkms:RevokeResultType"></element>
<complexType name="RevokeResultType">
<complexContent>
<extension base="xkms:ResultType">
<sequence>
<element ref="xkms:KeyBinding" minOccurs="0" maxOccurs="unbounded"></element></sequence></extension></complexContent></complexType>
<!-- /RevokeResult -->
<!-- RecoverRequest -->
<element name="RecoverRequest" type="xkms:RecoverRequestType"></element>
<complexType name="RecoverRequestType">
<complexContent>
<extension base="xkms:RequestAbstractType">
<sequence>
<element ref="xkms:RecoverKeyBinding"></element>
<element ref="xkms:Authentication"></element></sequence></extension></complexContent></complexType>
<element name="RecoverKeyBinding" type="xkms:KeyBindingType"></element>
<!-- /RecoverRequest -->
<!-- RecoverResult -->
<element name="RecoverResult" type="xkms:RecoverResultType"></element>
<complexType name="RecoverResultType">
<complexContent>
<extension base="xkms:ResultType">
<sequence>
<element ref="xkms:KeyBinding" minOccurs="0" maxOccurs="unbounded"></element>
<element ref="xkms:PrivateKey" minOccurs="0"></element></sequence></extension></complexContent></complexType>
<!-- /RecoverResult -->
<!-- RSAKeyPair -->
<element name="RSAKeyPair" type="xkms:RSAKeyPairType"></element>
<complexType name="RSAKeyPairType">
<sequence>
<element ref="xkms:Modulus"></element>
<element ref="xkms:Exponent"></element>
<element ref="xkms:P"></element>
<element ref="xkms:Q"></element>
<element ref="xkms:DP"></element>
<element ref="xkms:DQ"></element>
<element ref="xkms:InverseQ"></element>
<element ref="xkms:D"></element></sequence></complexType>
<element name="Modulus" type="ds:CryptoBinary"></element>
<element name="Exponent" type="ds:CryptoBinary"></element>
<element name="P" type="ds:CryptoBinary"></element>
<element name="Q" type="ds:CryptoBinary"></element>
<element name="DP" type="ds:CryptoBinary"></element>
<element name="DQ" type="ds:CryptoBinary"></element>
<element name="InverseQ" type="ds:CryptoBinary"></element>
<element name="D" type="ds:CryptoBinary"></element>
<!-- /RSAKeyPair -->
<!-- End Schema --></schema>
