<?xml version="1.0" encoding="UTF-8"?>
<!--
  This file contains the XML Schema of the SBR signature policy based on the principles of ETSI TR 102 038 V1.1.1 (2002-04)
  Version 1.0
  Released by the Dutch SBR Programme 
  Release date Wed Jun 1 12:00:00 2016
-->
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://www.nltaxonomie.nl/sbr/signature_policy_schema/v1.0/signature_policy" targetNamespace="http://www.nltaxonomie.nl/sbr/signature_policy_schema/v1.0/signature_policy" xmlns:ds="http://www.w3.org/2000/09/xmldsig#" xmlns:xades="http://uri.etsi.org/01903/v1.3.2#" elementFormDefault="qualified">
  <xsd:import namespace="http://www.w3.org/2001/XMLSchema" schemaLocation="http://www.w3.org/2001/XMLSchema.xsd"/>
  <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://uri.etsi.org/01903/v1.3.2#" schemaLocation="http://uri.etsi.org/01903/v1.3.2/XAdES.xsd"/>

  <xsd:element name="SignaturePolicy" type="SignaturePolicyType"/>

  <xsd:complexType name="SignaturePolicyType">
    <xsd:sequence>
      <xsd:element name="SignPolicyDigestAlg" type="ds:DigestMethodType"/>
      <xsd:element ref="ds:Transforms" minOccurs="0"/>
      <xsd:element name="SignPolicyInfo" type="SignPolicyInfoType"/>
      <xsd:element name="SignPolicyDigest" type="ds:DigestValueType"/>
    </xsd:sequence>
  </xsd:complexType>

  <xsd:complexType name="SignPolicyInfoType">
    <xsd:sequence>
      <xsd:element name="SignPolicyIdentifier" type="xades:ObjectIdentifierType"/>
      <xsd:element name="DateOfIssue" type="xsd:date"/>
      <xsd:element name="PolicyIssuerName" type="xsd:string"/>
      <xsd:element name="FieldOfApplication" type="xsd:string"/>
      <xsd:element name="SignatureValidationPolicy" type="SignatureValidationPolicyType"/>
    </xsd:sequence>
  </xsd:complexType>

  <xsd:complexType name="SignatureValidationPolicyType">
    <xsd:sequence>
      <xsd:element name="SigningPeriod" type="TimePeriodType"/>
      <xsd:element name="CommonRules" type="CommonRulesType"/>
      <xsd:element name="CommitmentRules" type="CommitmentRulesListType"/>
    </xsd:sequence>
  </xsd:complexType>

  <xsd:complexType name="TimePeriodType">
    <xsd:sequence>
      <xsd:element name="NotBefore" type="xsd:date"/>
    </xsd:sequence>
  </xsd:complexType>

  <xsd:complexType name="CommonRulesType">
    <xsd:sequence>
      <xsd:element name="SignerAndVerifierRules" type="SignerAndVerifierRulesType" minOccurs="0"/>
      <xsd:element name="SigningCertTrustCondition" type="SigningCertTrustConditionType" minOccurs="0"/>
      <xsd:element name="AlgorithmConstraintSet" type="AlgorithmConstraintSetType" minOccurs="0"/>
    </xsd:sequence>
  </xsd:complexType>

  <xsd:complexType name="SignerAndVerifierRulesType">
    <xsd:sequence>
      <xsd:element name="SignerRules" type="SignerRulesType"/>
    </xsd:sequence>
  </xsd:complexType>

  <xsd:complexType name="CommitmentRulesListType">
    <xsd:sequence maxOccurs="unbounded">
      <xsd:element name="CommitmentRule" type="CommitmentRuleType"/>
    </xsd:sequence>
  </xsd:complexType>

  <xsd:complexType name="CommitmentRuleType">
    <xsd:sequence>
      <xsd:element name="SelCommitmentTypes" type="SelectedCommitmentTypeList"/>
    </xsd:sequence>
  </xsd:complexType>

  <xsd:complexType name="SelectedCommitmentTypeList">
    <xsd:sequence maxOccurs="unbounded">
      <xsd:element name="SelCommitmentType" type="SelectedCommitmentType"/>
    </xsd:sequence>
  </xsd:complexType>

  <xsd:complexType name="SelectedCommitmentType">
    <xsd:sequence>

      <xsd:element name="RecognizedCommitmentType" type="CommitmentType"/>
    </xsd:sequence>
  </xsd:complexType>

  <xsd:complexType name="CommitmentType">
    <xsd:sequence>
      <xsd:element name="CommitmentIdentifier" type="xades:ObjectIdentifierType"/>
      <xsd:element name="FieldOfApplication" type="xsd:string" minOccurs="0"/>
      <xsd:element name="Semantics" type="xsd:string" minOccurs="0"/>
    </xsd:sequence>
  </xsd:complexType>

  <xsd:complexType name="SignerRulesType">
    <xsd:sequence>
      <xsd:element name="ExternalSignedObjects" type="xsd:boolean" minOccurs="0"/>
      <xsd:element name="MandatedSignedQProperties" type="QPropertiesListType"/>
      <xsd:element name="MandatedCertificateRef" type="CertificateReqType"/>
      <xsd:element name="MandatedCertificateInfo" type="CertificateReqType"/>
    </xsd:sequence>
  </xsd:complexType>

  <xsd:complexType name="QPropertiesListType">
    <xsd:sequence maxOccurs="unbounded">
      <xsd:element name="QPropertyID" type="xsd:anyURI"/>
    </xsd:sequence>
  </xsd:complexType>

  <xsd:simpleType name="CertificateReqType">
    <xsd:restriction base="xsd:string">
      <xsd:enumeration value="signerOnly"/>
    </xsd:restriction>
  </xsd:simpleType>


  <xsd:complexType name="SigningCertTrustConditionType">
    <xsd:sequence>
      <xsd:element name="SignerRevReq" type="CertificateRevReqType"/>
    </xsd:sequence>
  </xsd:complexType>

  <xsd:complexType name="CertificateRevReqType">
    <xsd:sequence>
      <xsd:element name="EndRevReq" type="RevocationReqType"/>
      <xsd:element name="CACerts" type="RevocationReqType"/>
    </xsd:sequence>
  </xsd:complexType>

  <xsd:complexType name="RevocationReqType">
    <xsd:sequence>
      <xsd:element name="EnuRevReq" type="EnuRevReqType"/>
    </xsd:sequence>
  </xsd:complexType>

  <xsd:simpleType name="EnuRevReqType">
    <xsd:restriction base="xsd:string">
      <xsd:enumeration value="clrcheck"/>
      <xsd:enumeration value="nocheck"/>
    </xsd:restriction>
  </xsd:simpleType>

  <xsd:complexType name="AlgorithmConstraintSetType">
    <xsd:sequence>
      <xsd:element name="SignerAlgConstraints" type="AlgConstraintsListType" minOccurs="0"/>
    </xsd:sequence>
  </xsd:complexType>

  <xsd:complexType name="AlgConstraintsListType">
    <xsd:sequence maxOccurs="unbounded">
      <xsd:element name="AlgAndLength" type="AlgAndLengthType"/>
    </xsd:sequence>
  </xsd:complexType>

  <xsd:complexType name="AlgAndLengthType">
    <xsd:sequence>
      <xsd:element name="AlgId" type="xsd:anyURI"/>
      <xsd:element name="MinKeyLength" type="xsd:integer" minOccurs="0"/>
    </xsd:sequence>
  </xsd:complexType>

</xsd:schema>
