<?xml version="1.0" encoding="UTF-8"?>
<!-- Securitylayer, Schnittstellenspezifikation -->
<!-- XML-Schema für Schnittstellenspezifikation Version 1.1.0, Protokollelemente im datierten Namespace 20020225 -->
<!-- 31. 08. 2002, Operative Unit, CIO, BMOeLS -->
<xsd:schema targetNamespace="http://www.buergerkarte.at/namespaces/securitylayer/20020225#" xmlns="http://www.buergerkarte.at/namespaces/securitylayer/20020225#" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:dsig="http://www.w3.org/2000/09/xmldsig#" elementFormDefault="qualified" attributeFormDefault="unqualified" version="1.1.0">
  <xsd:import namespace="http://www.w3.org/2000/09/xmldsig#" schemaLocation="http://www.w3.org/TR/xmldsig-core/xmldsig-core-schema.xsd"/>
  <xsd:import namespace="http://www.w3.org/XML/1998/namespace" schemaLocation="http://www.w3.org/2001/xml.xsd"/>
  <!--########### Create CMS Signature ###-->
  <!--### Create CMS Signature Request ###-->
  <xsd:element name="CreateCMSSignatureRequest" type="CreateCMSSignatureRequestType"/>
  <xsd:complexType name="CreateCMSSignatureRequestType">
    <xsd:sequence>
      <xsd:element name="KeyboxIdentifier" type="BoxIdentifierType"/>
      <xsd:element name="DataObject" type="CMSDataObjectRequiredMetaType"/>
    </xsd:sequence>
    <xsd:attribute name="Structure" use="required">
      <xsd:simpleType>
        <xsd:restriction base="xsd:string">
          <xsd:enumeration value="detached"/>
          <xsd:enumeration value="enveloping"/>
        </xsd:restriction>
      </xsd:simpleType>
    </xsd:attribute>
  </xsd:complexType>
  <xsd:complexType name="CMSDataObjectRequiredMetaType">
    <xsd:complexContent>
      <xsd:restriction base="CMSDataObjectOptionalMetaType">
        <xsd:sequence>
          <xsd:element name="MetaInfo" type="MetaInfoType"/>
          <xsd:element name="Content" type="CMSContentBaseType"/>
        </xsd:sequence>
      </xsd:restriction>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:complexType name="CMSDataObjectOptionalMetaType">
    <xsd:sequence>
      <xsd:element name="MetaInfo" type="MetaInfoType" minOccurs="0"/>
      <xsd:element name="Content" type="CMSContentBaseType"/>
    </xsd:sequence>
  </xsd:complexType>
  <xsd:complexType name="CMSContentBaseType">
    <xsd:complexContent>
      <xsd:restriction base="ContentOptionalRefType">
        <xsd:choice minOccurs="0">
          <xsd:element name="Base64Content" type="xsd:base64Binary"/>
        </xsd:choice>
      </xsd:restriction>
    </xsd:complexContent>
  </xsd:complexType>
  <!--### Create CMS Siganture Response ###-->
  <xsd:element name="CreateCMSSignatureResponse" type="CreateCMSSignatureResponseType"/>
  <xsd:complexType name="CreateCMSSignatureResponseType">
    <xsd:sequence>
      <xsd:element name="CMSSignature" type="xsd:base64Binary"/>
    </xsd:sequence>
  </xsd:complexType>
  <!--########## Create XML Signature ###-->
  <!--### Create XML Signature Request ###-->
  <xsd:element name="CreateXMLSignatureRequest" type="CreateXMLSignatureRequestType"/>
  <xsd:complexType name="CreateXMLSignatureRequestType">
    <xsd:sequence>
      <xsd:element name="KeyboxIdentifier" type="BoxIdentifierType"/>
      <xsd:element name="DataObjectInfo" type="DataObjectInfoType" maxOccurs="unbounded"/>
    </xsd:sequence>
  </xsd:complexType>
  <xsd:complexType name="MetaInfoType">
    <xsd:sequence>
      <xsd:element name="MimeType" type="MimeTypeType"/>
      <xsd:element name="Description" type="xsd:anyURI" minOccurs="0"/>
      <xsd:any namespace="##other" minOccurs="0" maxOccurs="unbounded"/>
    </xsd:sequence>
  </xsd:complexType>
  <xsd:complexType name="DataObjectInfoType">
    <xsd:sequence>
      <xsd:element name="DataObject" type="ContentOptionalRefType"/>
      <xsd:element name="TransformsInfo" type="TransformsInfoType" maxOccurs="unbounded"/>
      <xsd:element name="Supplement" type="XMLDataObjectAssociationType" minOccurs="0" maxOccurs="unbounded"/>
    </xsd:sequence>
    <xsd:attribute name="Structure" use="required">
      <xsd:simpleType>
        <xsd:restriction base="xsd:string">
          <xsd:enumeration value="detached"/>
          <xsd:enumeration value="enveloping"/>
        </xsd:restriction>
      </xsd:simpleType>
    </xsd:attribute>
  </xsd:complexType>
  <xsd:complexType name="TransformsInfoType">
    <xsd:sequence>
      <xsd:element ref="dsig:Transforms" minOccurs="0"/>
      <xsd:element name="FinalDataMetaInfo" type="MetaInfoType"/>
    </xsd:sequence>
  </xsd:complexType>
  <xsd:complexType name="XMLDataObjectAssociationType">
    <xsd:sequence>
      <xsd:element name="MetaInfo" type="MetaInfoType" minOccurs="0"/>
      <xsd:element name="Content" type="ContentRequiredRefType"/>
    </xsd:sequence>
  </xsd:complexType>
  <!--### Create XML Signature Response ###-->
  <xsd:element name="CreateXMLSignatureResponse" type="CreateXMLSignatureResponseType"/>
  <xsd:complexType name="CreateXMLSignatureResponseType">
    <xsd:sequence>
      <xsd:element ref="dsig:Signature"/>
    </xsd:sequence>
  </xsd:complexType>
  <!--########## Verify CMS Signature ###-->
  <!--### Verifiy CMS Signature Request ###-->
  <xsd:element name="VerifyCMSSignatureRequest" type="VerifyCMSSignatureRequestType"/>
  <xsd:complexType name="VerifyCMSSignatureRequestType">
    <xsd:sequence>
      <xsd:element name="DateTime" type="xsd:dateTime" minOccurs="0"/>
      <xsd:element name="CMSSignature" type="xsd:base64Binary"/>
      <xsd:element name="DataObject" type="CMSDataObjectOptionalMetaType" minOccurs="0"/>
    </xsd:sequence>
  </xsd:complexType>
  <!--### Verify CMS Signature Response ###-->
  <xsd:element name="VerifyCMSSignatureResponse" type="VerifyCMSSignatureResponseType"/>
  <xsd:complexType name="VerifyCMSSignatureResponseType">
    <xsd:sequence>
      <xsd:element name="SignerInfo" type="dsig:KeyInfoType"/>
      <xsd:element name="SignatureCheck" type="CheckResultType"/>
      <xsd:element name="CertificateCheck" type="CheckResultType"/>
    </xsd:sequence>
  </xsd:complexType>
  <!--########## Verify XML Signature ###-->
  <!--### Verify XML Signature Request ###-->
  <xsd:element name="VerifyXMLSignatureRequest" type="VerifyXMLSignatureRequestType"/>
  <xsd:complexType name="VerifyXMLSignatureRequestType">
    <xsd:sequence>
      <xsd:element name="DateTime" type="xsd:dateTime" minOccurs="0"/>
      <xsd:element name="SignatureInfo">
        <xsd:complexType>
          <xsd:sequence>
            <xsd:element name="SignatureEnvironment">
              <xsd:complexType>
                <xsd:sequence>
                  <xsd:any namespace="##any" processContents="skip"/>
                </xsd:sequence>
              </xsd:complexType>
            </xsd:element>
            <xsd:element name="SignatureLocation" type="xsd:token"/>
          </xsd:sequence>
        </xsd:complexType>
      </xsd:element>
      <xsd:element name="Supplement" type="XMLDataObjectAssociationType" minOccurs="0" maxOccurs="unbounded"/>
    </xsd:sequence>
  </xsd:complexType>
  <!--### Verify XML Signature Response ###-->
  <xsd:element name="VerifyXMLSignatureResponse" type="VerifyXMLSignatureResponseType"/>
  <xsd:complexType name="VerifyXMLSignatureResponseType">
    <xsd:sequence>
      <xsd:element name="SignerInfo" type="dsig:KeyInfoType"/>
      <xsd:element name="SignatureCheck" type="CheckResultType"/>
      <xsd:element name="SignatureManifestCheck" type="CheckResultType"/>
      <xsd:element name="CertificateCheck" type="CheckResultType"/>
    </xsd:sequence>
  </xsd:complexType>
  <xsd:complexType name="CheckResultType">
    <xsd:sequence>
      <xsd:element name="Code" type="xsd:nonNegativeInteger"/>
      <xsd:element name="Info" type="AnyChildrenType" minOccurs="0"/>
    </xsd:sequence>
  </xsd:complexType>
  <!--########## Infobox Commands ###-->
  <!--### Check Available Infoboxes Request ###-->
  <xsd:element name="InfoboxAvailableRequest" type="InfoboxAvailableRequestType"/>
  <xsd:complexType name="InfoboxAvailableRequestType"/>
  <!--### Check Available Infoboxes Response ###-->
  <xsd:element name="InfoboxAvailableResponse" type="InfoboxAvailableResponseType"/>
  <xsd:complexType name="InfoboxAvailableResponseType">
    <xsd:sequence minOccurs="0" maxOccurs="unbounded">
      <xsd:element name="InfoboxIdentifier" type="BoxIdentifierType"/>
    </xsd:sequence>
  </xsd:complexType>
  <!--### Read Infobox Request ###-->
  <xsd:element name="InfoboxReadRequest" type="InfoboxReadRequestType"/>
  <xsd:complexType name="InfoboxReadRequestType">
    <xsd:sequence>
      <xsd:element name="InfoboxIdentifier" type="BoxIdentifierType"/>
      <xsd:choice>
        <xsd:element name="BinaryFileParameters" type="InfoboxReadParamsBinaryFileType"/>
        <xsd:element name="AssocArrayParameters" type="InfoboxReadParamsAssocArrayType"/>
      </xsd:choice>
    </xsd:sequence>
  </xsd:complexType>
  <xsd:complexType name="InfoboxReadParamsBinaryFileType">
    <xsd:attribute name="ContentIsXMLEntity" type="xsd:boolean" use="optional" default="false"/>
  </xsd:complexType>
  <xsd:complexType name="InfoboxReadParamsAssocArrayType">
    <xsd:choice>
      <xsd:element name="ReadKeys">
        <xsd:complexType>
          <xsd:attribute name="SearchString" type="WildCardSearchStringType" use="required"/>
        </xsd:complexType>
      </xsd:element>
      <xsd:element name="ReadPairs">
        <xsd:complexType>
          <xsd:attribute name="SearchString" type="WildCardSearchStringType" use="required"/>
          <xsd:attribute name="ValuesAreXMLEntities" type="xsd:boolean" use="optional" default="false"/>
        </xsd:complexType>
      </xsd:element>
      <xsd:element name="ReadValue">
        <xsd:complexType>
          <xsd:attribute name="Key" type="BoxIdentifierType" use="required"/>
          <xsd:attribute name="ValueIsXMLEntity" type="xsd:boolean" use="optional" default="false"/>
        </xsd:complexType>
      </xsd:element>
    </xsd:choice>
  </xsd:complexType>
  <!--### Read Infobox Response ###-->
  <xsd:element name="InfoboxReadResponse" type="InfoboxReadResponseType"/>
  <xsd:complexType name="InfoboxReadResponseType">
    <xsd:choice>
      <xsd:element name="BinaryFileData" type="ContentBaseType"/>
      <xsd:element name="AssocArrayData" type="InfoboxReadDataAssocArrayType"/>
    </xsd:choice>
  </xsd:complexType>
  <xsd:complexType name="InfoboxReadDataAssocArrayType">
    <xsd:choice>
      <xsd:sequence minOccurs="0" maxOccurs="unbounded">
        <xsd:element name="Key" type="BoxIdentifierType"/>
      </xsd:sequence>
      <xsd:sequence minOccurs="0" maxOccurs="unbounded">
        <xsd:element name="Pair" type="InfoboxAssocArrayPairType"/>
      </xsd:sequence>
    </xsd:choice>
  </xsd:complexType>
  <!--### Update Infobox Request ###-->
  <xsd:element name="InfoboxUpdateRequest" type="InfoboxUpdateRequestType"/>
  <xsd:complexType name="InfoboxUpdateRequestType">
    <xsd:sequence>
      <xsd:element name="InfoboxIdentifier" type="BoxIdentifierType"/>
      <xsd:choice>
        <xsd:element name="BinaryFileParameters" type="ContentBaseType"/>
        <xsd:element name="AssocArrayParameters" type="InfoboxUpdateParamsAssocArrayType"/>
      </xsd:choice>
    </xsd:sequence>
  </xsd:complexType>
  <xsd:complexType name="InfoboxUpdateParamsAssocArrayType">
    <xsd:choice>
      <xsd:element name="UpdateKey">
        <xsd:complexType>
          <xsd:attribute name="Key" type="xsd:token" use="required"/>
          <xsd:attribute name="NewKey" type="xsd:token" use="required"/>
        </xsd:complexType>
      </xsd:element>
      <xsd:element name="UpdateValue" type="InfoboxAssocArrayPairType"/>
      <xsd:element name="DeletePair">
        <xsd:complexType>
          <xsd:attribute name="Key" type="xsd:token" use="required"/>
        </xsd:complexType>
      </xsd:element>
    </xsd:choice>
  </xsd:complexType>
  <!--### Update Infobox Response ###-->
  <xsd:element name="InfoboxUpdateResponse" type="InfoboxUpdateResponseType"/>
  <xsd:complexType name="InfoboxUpdateResponseType"/>
  <!--########## Create Session Certificate ###-->
  <!--### Create Session Certificate Request ###-->
  <xsd:element name="CreateSessionKeyRequest" type="CreateSessionKeyRequestType"/>
  <xsd:complexType name="CreateSessionKeyRequestType">
    <xsd:sequence>
      <xsd:element name="KeyboxIdentifier" type="BoxIdentifierType"/>
      <xsd:element name="Password" type="xsd:string"/>
      <xsd:element name="Minutes" type="xsd:positiveInteger"/>
    </xsd:sequence>
  </xsd:complexType>
  <!--### Create Session Certificate Response ###-->
  <xsd:element name="CreateSessionKeyResponse" type="CreateSessionKeyResponseType"/>
  <xsd:complexType name="CreateSessionKeyResponseType">
    <xsd:sequence>
      <xsd:element name="PKCS12Object" type="xsd:base64Binary"/>
      <xsd:element name="Certificate" type="xsd:base64Binary"/>
    </xsd:sequence>
  </xsd:complexType>
  <!--########## Create Symmetric Key ###-->
  <!--### Create SymmetricKey Request ###-->
  <xsd:element name="CreateSymmetricSecretRequest" type="CreateSymmetricSecretRequestType"/>
  <xsd:complexType name="CreateSymmetricSecretRequestType" mixed="false">
    <xsd:sequence>
      <xsd:element name="KeyboxIdentifier" type="BoxIdentifierType"/>
      <xsd:element ref="dsig:KeyInfo"/>
    </xsd:sequence>
  </xsd:complexType>
  <!--### Create SymmetricKey Response ###-->
  <xsd:element name="CreateSymmetricSecretResponse" type="CreateSymmetricSecretResponseType"/>
  <xsd:complexType name="CreateSymmetricSecretResponseType" mixed="false">
    <xsd:sequence>
      <xsd:element name="SymmetricSecretValue" type="xsd:base64Binary"/>
    </xsd:sequence>
  </xsd:complexType>
  <!--########## Get Properties ###-->
  <!--### Get Properties Request ###-->
  <xsd:element name="GetPropertiesRequest" type="GetPropertiesRequestType"/>
  <xsd:complexType name="GetPropertiesRequestType"/>
  <!--### Get Properties Response ###-->
  <xsd:element name="GetPropertiesResponse" type="GetPropertiesResponseType"/>
  <xsd:complexType name="GetPropertiesResponseType">
    <xsd:sequence>
      <xsd:element name="ViewerMediaType" type="MimeTypeType" maxOccurs="unbounded"/>
      <xsd:element name="XMLSignatureTransform" type="xsd:anyURI" minOccurs="5" maxOccurs="unbounded"/>
      <xsd:element name="KeyboxIdentifier" type="BoxIdentifierType" minOccurs="2" maxOccurs="unbounded"/>
      <xsd:element name="Binding" type="BindingType" minOccurs="2" maxOccurs="unbounded"/>
    </xsd:sequence>
  </xsd:complexType>
  <xsd:complexType name="BindingType" mixed="true">
    <xsd:complexContent mixed="true">
      <xsd:extension base="AnyChildrenType">
        <xsd:attribute name="Identifier" type="xsd:token" use="required"/>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <!--########### Get Token Status ###-->
  <!--### Get Token Status Reqeust ###-->
  <xsd:element name="GetStatusRequest" type="GetStatusRequestType"/>
  <xsd:complexType name="GetStatusRequestType">
    <xsd:sequence minOccurs="0">
      <xsd:element name="TokenStatus" type="TokenStatusType"/>
      <xsd:element name="MaxDelay" type="xsd:nonNegativeInteger"/>
    </xsd:sequence>
  </xsd:complexType>
  <!--### Get Token Status Response ###-->
  <xsd:element name="GetStatusResponse" type="GetStatusResponseType"/>
  <xsd:complexType name="GetStatusResponseType">
    <xsd:sequence>
      <xsd:element name="TokenStatus" type="TokenStatusType"/>
    </xsd:sequence>
  </xsd:complexType>
  <xsd:simpleType name="TokenStatusType">
    <xsd:restriction base="xsd:string">
      <xsd:enumeration value="ready"/>
      <xsd:enumeration value="removed"/>
    </xsd:restriction>
  </xsd:simpleType>
  <!--########## Error Response ###-->
  <xsd:element name="ErrorResponse" type="ErrorResponseType"/>
  <xsd:complexType name="ErrorResponseType">
    <xsd:sequence>
      <xsd:element name="ErrorCode" type="xsd:integer"/>
      <xsd:element name="Info" type="xsd:string"/>
    </xsd:sequence>
  </xsd:complexType>
  <!--########## Auxiliary Types ###-->
  <xsd:simpleType name="BoxIdentifierType">
    <xsd:restriction base="xsd:token"/>
  </xsd:simpleType>
  <xsd:simpleType name="MimeTypeType">
    <xsd:restriction base="xsd:token"/>
  </xsd:simpleType>
  <xsd:simpleType name="WildCardSearchStringType">
    <xsd:restriction base="xsd:string">
      <xsd:pattern value="[^\*/]*(\*[^\*/]*)?(/[^\*/]*(\*[^\*/]*)?)*"/>
    </xsd:restriction>
  </xsd:simpleType>
  <xsd:complexType name="AnyChildrenType" mixed="true">
    <xsd:sequence minOccurs="0" maxOccurs="unbounded">
      <xsd:any namespace="##any" processContents="lax"/>
    </xsd:sequence>
  </xsd:complexType>
  <xsd:complexType name="XMLContentType" mixed="true">
    <xsd:complexContent mixed="true">
      <xsd:extension base="AnyChildrenType">
        <xsd:attribute ref="xml:space" use="optional"/>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:complexType name="ContentBaseType">
    <xsd:choice minOccurs="0">
      <xsd:element name="Base64Content" type="xsd:base64Binary"/>
      <xsd:element name="XMLContent" type="XMLContentType"/>
    </xsd:choice>
  </xsd:complexType>
  <xsd:complexType name="ContentOptionalRefType">
    <xsd:complexContent>
      <xsd:extension base="ContentBaseType">
        <xsd:attribute name="Reference" type="xsd:anyURI" use="optional"/>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:complexType name="ContentRequiredRefType">
    <xsd:complexContent>
      <xsd:restriction base="ContentOptionalRefType">
        <xsd:choice>
          <xsd:element name="Base64Content" type="xsd:base64Binary"/>
          <xsd:element name="XMLContent" type="XMLContentType"/>
        </xsd:choice>
        <xsd:attribute name="Reference" type="xsd:anyURI" use="required"/>
      </xsd:restriction>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:complexType name="InfoboxAssocArrayPairType">
    <xsd:complexContent>
      <xsd:extension base="ContentBaseType">
        <xsd:attribute name="Key" type="xsd:string" use="required"/>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
</xsd:schema>