<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
    xmlns:res_repo="http://www.snb.ch/MMX/RepoResults"
    targetNamespace="http://www.snb.ch/MMX/RepoResults"
    elementFormDefault="qualified"
    xmlns:vc="http://www.w3.org/2007/XMLSchema-versioning"
    vc:minVersion="1.1">

    <xs:complexType name="LocalizedText">
        <xs:simpleContent>
            <xs:extension base="xs:string">
                <xs:attribute name="lang" use="required">
                    <xs:simpleType>
                        <xs:restriction base="xs:string">
                            <xs:enumeration value="en"/>
                            <xs:enumeration value="de"/>
                            <xs:enumeration value="fr"/>
                            <xs:enumeration value="it"/>
                        </xs:restriction>
                    </xs:simpleType>
                </xs:attribute>
            </xs:extension>
        </xs:simpleContent>
    </xs:complexType>

    <xs:element name="Document">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="Publication">
                    <xs:complexType>
                        <xs:sequence>
                            <xs:element name="PublicationID" type="xs:NCName"/>
                            <xs:element name="Title" type="res_repo:LocalizedText" minOccurs="4" maxOccurs="4"/>
                            <xs:element name="SequenceNr" type="xs:integer"/>
                            <xs:element name="RefSequenceNr" type="xs:integer" minOccurs="0" maxOccurs="1"/>
                            <xs:element name="Status">
                                <xs:simpleType>
                                    <xs:restriction base="xs:string">
                                        <xs:enumeration value="NEW"/>
                                        <xs:enumeration value="UPDATE"/>
                                        <xs:enumeration value="CANCEL"/>
                                    </xs:restriction>
                                </xs:simpleType>
                            </xs:element>
                        </xs:sequence>
                    </xs:complexType>
                    <xs:unique name="UniqueTitleLanguage">
                        <xs:selector xpath="res_repo:Title"/>
                        <xs:field xpath="@lang"/>
                    </xs:unique>
                </xs:element>
                <xs:element name="RepoResult" minOccurs="1" maxOccurs="1">
                    <xs:complexType>
                        <xs:sequence>
                            <xs:element name="TransactionDate" type="xs:date"/>
                            <xs:element name="OperationDirection">
                                <xs:simpleType>
                                    <xs:restriction base="xs:string">
                                        <xs:enumeration value="SNB_IS_CASH_PROVIDER"/>
                                        <xs:enumeration value="SNB_IS_CASH_TAKER"/>
                                    </xs:restriction>
                                </xs:simpleType>
                            </xs:element>
                            <xs:element name="Currency">
                                <xs:simpleType>
                                    <xs:restriction base="xs:string">
                                        <xs:enumeration value="CHF"/>
                                        <xs:enumeration value="USD"/>
                                    </xs:restriction>
                                </xs:simpleType>
                            </xs:element>
                            <xs:element name="PurchaseDate" type="xs:date"/>
                            <xs:element name="RepurchaseDate" type="xs:date"/>
                            <xs:element name="Term">
                                <xs:complexType>
                                    <xs:simpleContent>
                                        <xs:extension base="xs:integer">
                                            <xs:attribute name="unit" use="required">
                                                <xs:simpleType>
                                                    <xs:restriction base="xs:string">
                                                        <xs:enumeration value="d"/>
                                                    </xs:restriction>
                                                </xs:simpleType>
                                            </xs:attribute>
                                        </xs:extension>
                                    </xs:simpleContent>
                                </xs:complexType>
                            </xs:element>
                            <xs:element name="Procedure">
                                <xs:simpleType>
                                    <xs:restriction base="xs:string">
                                        <xs:enumeration value="FIXED_RATE_TENDER"/>
                                        <xs:enumeration value="VARIABLE_RATE_TENDER"/>
                                        <xs:enumeration value="QUOTATION"/>
                                    </xs:restriction>
                                </xs:simpleType>
                            </xs:element>
                            <xs:element name="AllotmentMethod" minOccurs="0" maxOccurs="1">
                                <xs:simpleType>
                                    <xs:restriction base="xs:string">
                                        <xs:enumeration value="DUTCH"/>
                                        <xs:enumeration value="AMERICAN"/>
                                    </xs:restriction>
                                </xs:simpleType>
                            </xs:element>
                            <xs:element name="RepoRateType">
                                <xs:simpleType>
                                    <xs:restriction base="xs:string">
                                        <xs:enumeration value="FIXED"/>
                                        <xs:enumeration value="INDEXED"/>
                                    </xs:restriction>
                                </xs:simpleType>
                            </xs:element>
                            <xs:element name="RepoRate" minOccurs="0" maxOccurs="1">
                                <xs:complexType>
                                    <xs:simpleContent>
                                        <xs:extension base="xs:decimal">
                                            <xs:attribute name="unit" use="required">
                                                <xs:simpleType>
                                                    <xs:restriction base="xs:string">
                                                        <xs:enumeration value="%"/>
                                                    </xs:restriction>
                                                </xs:simpleType>
                                            </xs:attribute>
                                        </xs:extension>
                                    </xs:simpleContent>
                                </xs:complexType>
                            </xs:element>
                            <xs:element name="MarginalRepoRate" minOccurs="0" maxOccurs="1">
                                <xs:complexType>
                                    <xs:simpleContent>
                                        <xs:extension base="xs:decimal">
                                            <xs:attribute name="unit" use="required">
                                                <xs:simpleType>
                                                    <xs:restriction base="xs:string">
                                                        <xs:enumeration value="%"/>
                                                    </xs:restriction>
                                                </xs:simpleType>
                                            </xs:attribute>
                                        </xs:extension>
                                    </xs:simpleContent>
                                </xs:complexType>
                            </xs:element>
                            <xs:element name="ReferenceIndex" minOccurs="0" maxOccurs="1">
                                <xs:simpleType>
                                    <xs:restriction base="xs:string">
                                        <xs:enumeration value="SNB_POLICY_RATE"/>
                                    </xs:restriction>
                                </xs:simpleType>
                            </xs:element>
                            <xs:element name="Spread" minOccurs="0" maxOccurs="1">
                                <xs:complexType>
                                    <xs:simpleContent>
                                        <xs:extension base="xs:decimal">
                                            <xs:attribute name="unit" use="required">
                                                <xs:simpleType>
                                                    <xs:restriction base="xs:string">
                                                        <xs:enumeration value="bps"/>
                                                    </xs:restriction>
                                                </xs:simpleType>
                                            </xs:attribute>
                                        </xs:extension>
                                    </xs:simpleContent>
                                </xs:complexType>
                            </xs:element>
                            <xs:element name="MarginalSpread" minOccurs="0" maxOccurs="1">
                                <xs:complexType>
                                    <xs:simpleContent>
                                        <xs:extension base="xs:decimal">
                                            <xs:attribute name="unit" use="required">
                                                <xs:simpleType>
                                                    <xs:restriction base="xs:string">
                                                        <xs:enumeration value="bps"/>
                                                    </xs:restriction>
                                                </xs:simpleType>
                                            </xs:attribute>
                                        </xs:extension>
                                    </xs:simpleContent>
                                </xs:complexType>
                            </xs:element>
                            <xs:element name="Allotment" type="xs:integer" minOccurs="0" maxOccurs="1"/>
                            <xs:element name="AdditionalInformation" type="xs:string" minOccurs="0" maxOccurs="1"/>
                        </xs:sequence>
                    </xs:complexType>
                </xs:element>
            </xs:sequence>
            <xs:attribute name="schemaVersion" use="required">
                <!-- Restrict the version attribute to a list of valid versions -->
                <xs:simpleType>
                    <xs:restriction base="xs:string">
                        <xs:enumeration value="1.2"/>
                    </xs:restriction>
                </xs:simpleType>
            </xs:attribute>
        </xs:complexType>
    </xs:element>
</xs:schema>
