<?xml version="1.0" encoding="UTF-8"?>
<!-- edited with XMLSPY v5 rel. 4 U (http://www.xmlspy.com) by Rudolf Schamberger (Stabsstelle IKT-Strategie) (Bundesrechenzentrum GmbH) -->
<xsd:schema xmlns="http://www.buergerkarte.at/namespaces/moaconfig#" xmlns:pr="http://reference.e-government.gv.at/namespace/persondata/20020228#" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:dsig="http://www.w3.org/2000/09/xmldsig#" targetNamespace="http://www.buergerkarte.at/namespaces/moaconfig#" elementFormDefault="qualified" attributeFormDefault="unqualified" version="1.1.1">
  <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://reference.e-government.gv.at/namespace/persondata/20020228#" schemaLocation="PersonData_20_en_moaWID.xsd"/>
  <xsd:element name="Configuration">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element name="LoginType" type="LoginType" default="stateful"/>
        <xsd:element name="Binding" minOccurs="0">
          <xsd:simpleType>
            <xsd:restriction base="xsd:string">
              <xsd:enumeration value="full"/>
              <xsd:enumeration value="userName"/>
              <xsd:enumeration value="none"/>
            </xsd:restriction>
          </xsd:simpleType>
        </xsd:element>
        <xsd:choice>
          <xsd:element ref="ParamAuth"/>
          <xsd:element ref="BasicAuth"/>
          <xsd:element ref="HeaderAuth"/>
        </xsd:choice>
      </xsd:sequence>
    </xsd:complexType>
  </xsd:element>
  <xsd:simpleType name="LoginType">
    <xsd:restriction base="xsd:token">
      <xsd:enumeration value="stateless"/>
      <xsd:enumeration value="stateful"/>
    </xsd:restriction>
  </xsd:simpleType>
  <xsd:element name="ParamAuth">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element ref="Parameter" maxOccurs="unbounded"/>
      </xsd:sequence>
    </xsd:complexType>
  </xsd:element>
  <xsd:element name="Parameter">
    <xsd:complexType>
      <xsd:attribute name="Name" type="xsd:token" use="required"/>
      <xsd:attribute name="Value" type="MOAAuthDataType" use="required"/>
    </xsd:complexType>
  </xsd:element>
  <xsd:element name="BasicAuth">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element name="UserID" type="MOAAuthDataType"/>
        <xsd:element name="Password" type="MOAAuthDataType"/>
      </xsd:sequence>
    </xsd:complexType>
  </xsd:element>
  <xsd:element name="HeaderAuth">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element ref="Header" maxOccurs="unbounded"/>
      </xsd:sequence>
    </xsd:complexType>
  </xsd:element>
  <xsd:element name="Header">
    <xsd:complexType>
      <xsd:attribute name="Name" type="xsd:token" use="required"/>
      <xsd:attribute name="Value" type="MOAAuthDataType" use="required"/>
    </xsd:complexType>
  </xsd:element>
  <xsd:simpleType name="MOAAuthDataType">
    <xsd:restriction base="xsd:token">
      <xsd:enumeration value="MOAGivenName"/>
      <xsd:enumeration value="MOAFamilyName"/>
      <xsd:enumeration value="MOADateOfBirth"/>
      <xsd:enumeration value="MOABPK"/>
      <xsd:enumeration value="MOAWBPK"/>
      <xsd:enumeration value="MOAPublicAuthority"/>
      <xsd:enumeration value="MOABKZ"/>
      <xsd:enumeration value="MOAQualifiedCertificate"/>
      <xsd:enumeration value="MOAStammzahl"/>
      <xsd:enumeration value="MOAIdentificationValueType"/>
      <xsd:enumeration value="MOAIPAddress"/>
    </xsd:restriction>
  </xsd:simpleType>
  <xsd:simpleType name="MOAKeyBoxSelector">
    <xsd:restriction base="xsd:token">
      <xsd:enumeration value="SecureSignatureKeypair"/>
      <xsd:enumeration value="CertifiedKeypair"/>
    </xsd:restriction>
  </xsd:simpleType>
  <!--Konfiguration für Authentisierungs- und Proxy-Komponente und Online-Applikation-->
  <xsd:element name="MOA-IDConfiguration">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element name="AuthComponent" type="AuthComponentType" minOccurs="0">
          <xsd:annotation>
            <xsd:documentation>enthält Parameter der 
							Authentisierungs-Komponente</xsd:documentation>
          </xsd:annotation>
        </xsd:element>
        <xsd:element name="ProxyComponent" minOccurs="0">
          <xsd:annotation>
            <xsd:documentation>enthält Konfigurationsparameter der 
							Proxy-Komponente</xsd:documentation>
          </xsd:annotation>
          <xsd:complexType>
            <xsd:sequence>
              <xsd:element name="AuthComponent">
                <xsd:annotation>
                  <xsd:documentation>enthält Parameter für die Kommunikation zw. 
										Proxykomponente und Authenttisierungskomponente</xsd:documentation>
                </xsd:annotation>
                <xsd:complexType>
                  <xsd:sequence>
                    <xsd:element name="ConnectionParameter" type="ConnectionParameterClientAuthType" minOccurs="0">
                      <xsd:annotation>
                        <xsd:documentation>enthält Parameter für die SOAP-Verbindung von der 
													Proxy-Komponente zur Auth-Komponente (vgl. 
													AuthComponent/MOA-SP/ConnectionParameter)</xsd:documentation>
                      </xsd:annotation>
                    </xsd:element>
                  </xsd:sequence>
                </xsd:complexType>
              </xsd:element>
            </xsd:sequence>
          </xsd:complexType>
        </xsd:element>
        <xsd:element name="OnlineApplication" maxOccurs="unbounded">
          <xsd:annotation>
            <xsd:documentation>enthält Parameter für die OA</xsd:documentation>
          </xsd:annotation>
          <xsd:complexType>
            <xsd:complexContent>
              <xsd:extension base="OnlineApplicationType">
                <xsd:attribute name="publicURLPrefix" type="xsd:anyURI" use="required"/>
                <xsd:attribute name="keyBoxIdentifier" type="MOAKeyBoxSelector" use="optional" default="SecureSignatureKeypair"/>
                <xsd:attribute name="type" use="optional" default="publicService">
                  <xsd:simpleType>
                    <xsd:restriction base="xsd:NMTOKEN">
                      <xsd:enumeration value="businessService"/>
                      <xsd:enumeration value="publicService"/>
                    </xsd:restriction>
                  </xsd:simpleType>
                </xsd:attribute>
                <xsd:attribute name="calculateHPI" type="xsd:boolean" use="optional" default="false"/>
              </xsd:extension>
            </xsd:complexContent>
          </xsd:complexType>
        </xsd:element>
        <xsd:element name="ChainingModes" minOccurs="0">
          <xsd:annotation>
            <xsd:documentation>spezifiziert den Algorithmus ("pkix" oder "chaining") für die 
							Zertifikatspfadvalidierung</xsd:documentation>
          </xsd:annotation>
          <xsd:complexType>
            <xsd:sequence minOccurs="0" maxOccurs="unbounded">
              <xsd:element name="TrustAnchor">
                <xsd:annotation>
                  <xsd:documentation>ein vom SystemDefaultMode abweichender ChiningMode kann 
										für jeden TrustAnchor gesetzt werden</xsd:documentation>
                </xsd:annotation>
                <xsd:complexType>
                  <xsd:complexContent>
                    <xsd:extension base="dsig:X509IssuerSerialType">
                      <xsd:attribute name="mode" type="ChainingModeType" use="required"/>
                    </xsd:extension>
                  </xsd:complexContent>
                </xsd:complexType>
              </xsd:element>
            </xsd:sequence>
            <xsd:attribute name="systemDefaultMode" type="ChainingModeType" use="optional" default="pkix"/>
          </xsd:complexType>
        </xsd:element>
        <xsd:element name="TrustedCACertificates" type="xsd:anyURI" minOccurs="0">
          <xsd:annotation>
            <xsd:documentation>verweist auf ein Verzeichnis, das vertrauenswürdige CA 
							(Zwischen-CA, Wurzel-CA) Zertifikate enthält.</xsd:documentation>
          </xsd:annotation>
        </xsd:element>
        <xsd:element name="GenericConfiguration" minOccurs="0" maxOccurs="unbounded">
          <xsd:complexType>
            <xsd:attribute name="name" use="required">
              <xsd:simpleType>
                <xsd:restriction base="xsd:string">
                  <xsd:enumeration value="DirectoryCertStoreParameters.RootDir"/>
                  <xsd:enumeration value="AuthenticationSession.TimeOut"/>
                  <xsd:enumeration value="AuthenticationData.TimeOut"/>
                  <xsd:enumeration value="TrustManager.RevocationChecking"/>
                  <xsd:enumeration value="FrontendServlets.EnableHTTPConnection"/>
                  <xsd:enumeration value="FrontendServlets.DataURLPrefix"/>
                  <xsd:enumeration value="AuthenticationServer.KeepAssertion"/>
                  <xsd:enumeration value="AuthenticationServer.WriteAssertionToFile"/>
                </xsd:restriction>
              </xsd:simpleType>
            </xsd:attribute>
            <xsd:attribute name="value" type="xsd:string" use="required"/>
          </xsd:complexType>
        </xsd:element>
      </xsd:sequence>
    </xsd:complexType>
  </xsd:element>
  <xsd:complexType name="AuthComponentType">
    <xsd:sequence>
      <xsd:element name="BKUSelection" minOccurs="0">
        <xsd:complexType>
          <xsd:sequence>
            <xsd:element name="ConnectionParameter" type="ConnectionParameterServerAuthType"/>
          </xsd:sequence>
          <xsd:attribute name="BKUSelectionAlternative" type="BKUSelectionType" use="optional" default="HTMLComplete"/>
        </xsd:complexType>
      </xsd:element>
      <xsd:element name="Templates" type="TemplatesType" minOccurs="0"/>
      <xsd:element name="SecurityLayer">
        <xsd:annotation>
          <xsd:documentation>enthält Parameter für die Kommunikation mit dem 
						Security-Layer</xsd:documentation>
        </xsd:annotation>
        <xsd:complexType>
          <xsd:sequence>
            <xsd:element name="TransformsInfo" type="TransformsInfoType" maxOccurs="unbounded"/>
          </xsd:sequence>
        </xsd:complexType>
      </xsd:element>
      <xsd:element name="MOA-SP">
        <xsd:annotation>
          <xsd:documentation>enthält Konfiguratiosnparameter für die Kommunikation mit dem MOA 
						SP Modul</xsd:documentation>
        </xsd:annotation>
        <xsd:complexType>
          <xsd:sequence>
            <xsd:element name="ConnectionParameter" type="ConnectionParameterClientAuthType" minOccurs="0">
              <xsd:annotation>
                <xsd:documentation>enthält Parameter für die SOAP-Verbindung von der 
									AUTH-Komponente zu MOA-SP; das Attribut URL enthält den Endpunkt des Server; 
									wird das Schema "https" verwendet müssen die Kind-Elemente angegeben werden; 
									wird das Schema "http" verwendet dürfen keine Kind-Elemente angegeben 
									werden; wird das Element nicht verwendet dann wird MOA-SP über das API 
									aufgerufen</xsd:documentation>
              </xsd:annotation>
            </xsd:element>
            <xsd:element name="VerifyIdentityLink">
              <xsd:annotation>
                <xsd:documentation>enthält Parameter für die Überprüfung der 
									Personenbindung</xsd:documentation>
              </xsd:annotation>
              <xsd:complexType>
                <xsd:sequence>
                  <xsd:element ref="TrustProfileID"/>
                </xsd:sequence>
              </xsd:complexType>
            </xsd:element>
            <xsd:element name="VerifyAuthBlock">
              <xsd:annotation>
                <xsd:documentation>enthält Parameter für die Überprüfung des 
									AUTH-Blocks</xsd:documentation>
              </xsd:annotation>
              <xsd:complexType>
                <xsd:sequence>
                  <xsd:element ref="TrustProfileID"/>
                  <xsd:element name="VerifyTransformsInfoProfileID" type="xsd:string" minOccurs="0" maxOccurs="unbounded"/>
                </xsd:sequence>
              </xsd:complexType>
            </xsd:element>
          </xsd:sequence>
        </xsd:complexType>
      </xsd:element>
      <xsd:element name="IdentityLinkSigners" minOccurs="0">
        <xsd:annotation>
          <xsd:documentation>enthält Informationen über akzeptierte Signers des 
						IdentityLinks</xsd:documentation>
        </xsd:annotation>
        <xsd:complexType>
          <xsd:sequence>
            <xsd:element name="X509SubjectName" type="xsd:string" maxOccurs="unbounded">
              <xsd:annotation>
                <xsd:documentation>akzeptierte Signer des IdentityLinks werden per 
									X509SubjectName (Kodierung nach RFC 2253) identifiziert</xsd:documentation>
              </xsd:annotation>
            </xsd:element>
          </xsd:sequence>
        </xsd:complexType>
      </xsd:element>
      <xsd:element name="VerifyInfoboxes" type="VerifyInfoboxesType" minOccurs="0">
        <xsd:annotation>
          <xsd:documentation>enthält Defaultparameter für die Überprüfung weiterer Infoboxen</xsd:documentation>
        </xsd:annotation>
      </xsd:element>
    </xsd:sequence>
  </xsd:complexType>
  <xsd:complexType name="TransformsInfoType">
    <xsd:annotation>
      <xsd:documentation>das Attribut filename verweist auf eine Datei mit globalem 
				Element TransformsInfo vom Typ sl10:TransformsInfo; diese TransformsInfo 
				werden in den CreateXMLSignatureRequest für die Signatur des AUTH-Blocks 
				inkludiert</xsd:documentation>
    </xsd:annotation>
    <xsd:attribute name="filename" type="xsd:anyURI" use="required"/>
  </xsd:complexType>
  <xsd:complexType name="TemplatesType">
    <xsd:sequence>
      <xsd:element name="BKUSelectionTemplate" type="TemplateType" minOccurs="0"/>
      <xsd:element name="Template" type="TemplateType" minOccurs="0"/>
      <xsd:element name="InputProcessorSignTemplate" type="TemplateType" minOccurs="0"/>
    </xsd:sequence>
  </xsd:complexType>
  <xsd:complexType name="TemplateType">
    <xsd:annotation>
      <xsd:documentation>das Attribut URL spezifiziert die Lage des Templates</xsd:documentation>
    </xsd:annotation>
    <xsd:attribute name="URL" type="xsd:anyURI" use="required"/>
  </xsd:complexType>
  <xsd:complexType name="VerifyInfoboxesType">
    <xsd:annotation>
      <xsd:documentation>Verifikation zusätzlicher Infoboxen</xsd:documentation>
    </xsd:annotation>
    <xsd:sequence>
      <xsd:element name="DefaultTrustProfile" minOccurs="0">
        <xsd:annotation>
          <xsd:documentation>Optionales DefaultTrustprofil für die Überprüfung aller weiteren Infoboxen</xsd:documentation>
        </xsd:annotation>
        <xsd:complexType>
          <xsd:sequence>
            <xsd:element ref="TrustProfileID"/>
          </xsd:sequence>
        </xsd:complexType>
      </xsd:element>
      <xsd:element name="Infobox" maxOccurs="unbounded">
        <xsd:annotation>
          <xsd:documentation>Parameter für Überprüfung weiterer Infoboxen</xsd:documentation>
        </xsd:annotation>
        <xsd:complexType>
          <xsd:sequence>
            <xsd:element name="FriendlyName" type="xsd:string" minOccurs="0">
              <xsd:annotation>
                <xsd:documentation>optionalervName, der für Fehlermeldungen verwendet werden soll;
								z.B.: "Stellvertretungen" für "Mandates"; fehlt dieser Parameter, dann wird
								das Identifier-Attribut verwendet</xsd:documentation>
              </xsd:annotation>
            </xsd:element>
            <xsd:element name="TrustProfileID" type="xsd:string" minOccurs="0">
              <xsd:annotation>
                <xsd:documentation>TrustProfil, das für die Überprüfung der Infobox
								verwendet werden soll</xsd:documentation>
              </xsd:annotation>
            </xsd:element>
            <xsd:element name="ValidatorClass" type="xsd:string" minOccurs="0">
              <xsd:annotation>
                <xsd:documentation>Validatorklasse, die für die Prüfung der Infobox
								verwendet werden soll; muss gesetzt werden, wenn Package- und Klassenname
								vom Default Package- und Klassennamen abweichen</xsd:documentation>
              </xsd:annotation>
            </xsd:element>
            <xsd:element name="SchemaLocations" type="SchemaLocationType" minOccurs="0"/>
            <xsd:element name="ApplicationSpecificParameters" minOccurs="0">
              <xsd:annotation>
                <xsd:documentation>Infobox spezifische Parameter, die der jeweiligen Prüfapplikation
									 übergeben werden</xsd:documentation>
              </xsd:annotation>
              <xsd:complexType>
                <xsd:sequence>
                  <xsd:any namespace="##any" processContents="skip" maxOccurs="unbounded"/>
                </xsd:sequence>
              </xsd:complexType>
            </xsd:element>
          </xsd:sequence>
          <xsd:attribute name="Identifier" type="xsd:string" use="required"/>
          <xsd:attribute name="required" type="xsd:boolean" use="optional" default="false"/>
          <xsd:attribute name="provideStammzahl" type="xsd:boolean" use="optional" default="false"/>
          <xsd:attribute name="provideIdentityLink" type="xsd:boolean" use="optional" default="false"/>
        </xsd:complexType>
      </xsd:element>
    </xsd:sequence>
  </xsd:complexType>
  <xsd:complexType name="SchemaLocationType">
    <xsd:annotation>
      <xsd:documentation>Spezifiziert die Lage von XML Schemas</xsd:documentation>
    </xsd:annotation>
    <xsd:sequence>
      <xsd:element name="Schema" maxOccurs="unbounded">
        <xsd:complexType>
          <xsd:attribute name="namespace" type="xsd:anyURI" use="required"/>
          <xsd:attribute name="schemaLocation" type="xsd:anyURI" use="required"/>
        </xsd:complexType>
      </xsd:element>
    </xsd:sequence>
  </xsd:complexType>
  <xsd:complexType name="ProxyComponentType"/>
  <xsd:complexType name="OnlineApplicationType">
    <xsd:sequence>
      <xsd:element name="AuthComponent" minOccurs="0">
        <xsd:annotation>
          <xsd:documentation>enthält Parameter über die OA, die die 
						Authentisierungs-Komponente betreffen</xsd:documentation>
        </xsd:annotation>
        <xsd:complexType>
          <xsd:sequence>
            <!--xsd:element name="IdentificationNumber" minOccurs="0">
							<xsd:complexType>
								<xsd:sequence>
									<xsd:element ref="pr:AbstractSimpleIdentification"/>
								</xsd:sequence>
							</xsd:complexType>
						</xsd:element-->
            <xsd:element name="IdentificationNumber" minOccurs="0">
              <xsd:complexType>
                <xsd:choice>
                  <xsd:element ref="pr:Firmenbuchnummer"/>
                  <xsd:element ref="pr:ZMRzahl"/>
                  <xsd:element ref="pr:Vereinsnummer"/>
                  <xsd:element ref="pr:ERJPZahl"/>
                  <xsd:element name="AnyNumber">
                    <xsd:complexType>
                      <xsd:simpleContent>
                        <xsd:extension base="xsd:string">
                          <xsd:attribute name="Identifier" type="xsd:string" use="required"/>
                        </xsd:extension>
                      </xsd:simpleContent>
                    </xsd:complexType>
                  </xsd:element>
                </xsd:choice>
              </xsd:complexType>
            </xsd:element>
            <xsd:element name="Templates" type="TemplatesType" minOccurs="0"/>
            <xsd:element name="TransformsInfo" type="TransformsInfoType" minOccurs="0" maxOccurs="unbounded"/>
            <xsd:element name="VerifyInfoboxes" type="VerifyInfoboxesType" minOccurs="0"/>
          </xsd:sequence>
          <xsd:attribute name="slVersion" use="optional" default="1.1">
            <xsd:simpleType>
              <xsd:restriction base="xsd:string">
                <xsd:enumeration value="1.1"/>
                <xsd:enumeration value="1.2"/>
              </xsd:restriction>
            </xsd:simpleType>
          </xsd:attribute>
          <xsd:attribute name="provideStammzahl" type="xsd:boolean" use="optional" default="false"/>
          <xsd:attribute name="provideAUTHBlock" type="xsd:boolean" use="optional" default="false"/>
          <xsd:attribute name="provideIdentityLink" type="xsd:boolean" use="optional" default="false"/>
          <xsd:attribute name="provideCertificate" type="xsd:boolean" use="optional" default="false"/>
          <!--xsd:element ref="pr:AbstractSimpleIdentification" minOccurs="0" maxOccurs="1"/-->
        </xsd:complexType>
      </xsd:element>
      <xsd:element name="ProxyComponent" minOccurs="0">
        <xsd:annotation>
          <xsd:documentation>enthält Parameter über die OA, die die Proxy-Komponente 
						betreffen</xsd:documentation>
        </xsd:annotation>
        <xsd:complexType>
          <xsd:sequence>
            <xsd:element name="ConnectionParameter" type="ConnectionParameterClientAuthType">
              <xsd:annotation>
                <xsd:documentation>enthält Parameter über die OA, die die Proxy-Komponente 
									betreffen</xsd:documentation>
              </xsd:annotation>
            </xsd:element>
          </xsd:sequence>
          <xsd:attribute name="configFileURL" type="xsd:anyURI" use="optional"/>
          <xsd:attribute name="sessionTimeOut" type="xsd:int" use="optional"/>
          <xsd:attribute name="loginParameterResolverImpl" type="xsd:string" use="optional"/>
          <xsd:attribute name="loginParameterResolverConfiguration" type="xsd:string" use="optional"/>
          <xsd:attribute name="connectionBuilderImpl" type="xsd:string" use="optional"/>
        </xsd:complexType>
      </xsd:element>
      <!--xsd:element ref="pr:CorporateBody" minOccurs="0" maxOccurs="1"/-->
    </xsd:sequence>
  </xsd:complexType>
  <xsd:complexType name="ConnectionParameterServerAuthType">
    <xsd:sequence>
      <xsd:element name="AcceptedServerCertificates" type="xsd:anyURI" minOccurs="0">
        <xsd:annotation>
          <xsd:documentation>URL zu einem Verzeichnis, das akzeptierte Server-Zertifikate der 
						TLS-Verbindung enthält (keine CA-Zertifikate)</xsd:documentation>
        </xsd:annotation>
      </xsd:element>
    </xsd:sequence>
    <xsd:attribute name="URL" type="xsd:anyURI" use="required"/>
  </xsd:complexType>
  <xsd:complexType name="ConnectionParameterClientAuthType">
    <xsd:complexContent>
      <xsd:extension base="ConnectionParameterServerAuthType">
        <xsd:sequence>
          <xsd:element name="ClientKeyStore" minOccurs="0">
            <xsd:annotation>
              <xsd:documentation>URL zu einem KeyStore, der den privaten Schlüssel, der für 
								die TLS-Client-Authentisierung verwendetwird, enthält</xsd:documentation>
            </xsd:annotation>
            <xsd:complexType>
              <xsd:simpleContent>
                <xsd:extension base="xsd:anyURI">
                  <xsd:attribute name="password" type="xsd:string" use="optional"/>
                </xsd:extension>
              </xsd:simpleContent>
            </xsd:complexType>
          </xsd:element>
        </xsd:sequence>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="TrustProfileID" type="xsd:string"/>
  <xsd:simpleType name="ChainingModeType">
    <xsd:restriction base="xsd:string">
      <xsd:enumeration value="chaining"/>
      <xsd:enumeration value="pkix"/>
    </xsd:restriction>
  </xsd:simpleType>
  <xsd:simpleType name="BKUSelectionType">
    <xsd:restriction base="xsd:token">
      <xsd:enumeration value="HTMLComplete"/>
      <xsd:enumeration value="HTMLSelect"/>
    </xsd:restriction>
  </xsd:simpleType>
</xsd:schema>