<?xml version="1.0" encoding="UTF-8"?>
<!-- Product version : 6.21.189 -->
<xs:schema
        targetNamespace="http://www.deutsche-boerse.com/m7-reporter"
        xmlns:xs="http://www.w3.org/2001/XMLSchema"
        xmlns="http://www.deutsche-boerse.com/m7-reporter"
        elementFormDefault="qualified">

    <xs:simpleType name="stringType3">
        <xs:restriction base="xs:string">
            <xs:maxLength value="3"/>
        </xs:restriction>
    </xs:simpleType>

    <xs:simpleType name="stringType4">
        <xs:restriction base="xs:string">
            <xs:maxLength value="4"/>
        </xs:restriction>
    </xs:simpleType>

    <xs:simpleType name="stringType5">
        <xs:restriction base="xs:string">
            <xs:maxLength value="5"/>
        </xs:restriction>
    </xs:simpleType>

    <xs:simpleType name="stringType16">
        <xs:restriction base="xs:string">
            <xs:maxLength value="16"/>
        </xs:restriction>
    </xs:simpleType>

    <xs:simpleType name="stringType32">
        <xs:restriction base="xs:string">
            <xs:maxLength value="32"/>
        </xs:restriction>
    </xs:simpleType>

    <xs:simpleType name="stringType64">
        <xs:restriction base="xs:string">
            <xs:maxLength value="64"/>
        </xs:restriction>
    </xs:simpleType>

    <xs:simpleType name="stringType128">
        <xs:restriction base="xs:string">
            <xs:maxLength value="128"/>
        </xs:restriction>
    </xs:simpleType>

    <xs:simpleType name="stringType255">
        <xs:restriction base="xs:string">
            <xs:maxLength value="255"/>
        </xs:restriction>
    </xs:simpleType>

    <xs:simpleType name="boolType">
        <xs:restriction base="xs:boolean"/>
    </xs:simpleType>

    <xs:simpleType name="utcTimeType">
        <xs:annotation>
            <xs:documentation>
UTC time in the ISO 8601 format.
            </xs:documentation>
        </xs:annotation>
        <xs:restriction base="xs:dateTime"/>
    </xs:simpleType>

    <xs:simpleType name="userCodeType">
        <xs:annotation>
            <xs:documentation>
This field contains the user code.
            </xs:documentation>
        </xs:annotation>
        <xs:restriction base="xs:string">
            <xs:maxLength value="6"/>
        </xs:restriction>
    </xs:simpleType>

    <xs:simpleType name="quantityType">
        <xs:restriction base="xs:decimal">
            <xs:fractionDigits value="3"/>
            <xs:totalDigits value="16"/>
            <xs:minInclusive value="0"/>
        </xs:restriction>
    </xs:simpleType>

    <xs:simpleType name="priceType">
        <xs:annotation>
            <xs:documentation>
Price as float. eg. 112.35
            </xs:documentation>
        </xs:annotation>
        <xs:restriction base="xs:decimal">
            <xs:fractionDigits value="2"/>
            <xs:totalDigits value="16"/>
        </xs:restriction>
    </xs:simpleType>

    <xs:simpleType name="tradeMatchPriceType">
        <xs:annotation>
            <xs:documentation>
                Price as float. eg. 112.35 or empty string.
                It is possible that in case of synchronisation issues with the XBID instance the M7 application will not be able to retrieve the match price of a trade so the attribute will be reported with an empty string. In addition, it will be required that the Market Operators check the trade match prices of all partial trades related to this ordrId against the XBID TC reports, as in this rare event M7 Trading cannot guarantee that these will be reported correctly.
            </xs:documentation>
        </xs:annotation>
        <xs:union memberTypes="priceType empty"/>
    </xs:simpleType>

    <xs:simpleType name="empty">
        <xs:restriction base="xs:string">
            <xs:enumeration value=""/>
        </xs:restriction>
    </xs:simpleType>

    <xs:simpleType name="orderIdType">
        <xs:annotation>
            <xs:documentation>
The "Order ID". It may be changed when the order is modified.
            </xs:documentation>
        </xs:annotation>
        <xs:restriction base="xs:long">
            <xs:totalDigits value="20"/>
        </xs:restriction>
    </xs:simpleType>

    <xs:simpleType name="orderTypeCodeType">
        <xs:annotation>
            <xs:documentation>
The order type code. Valid values:

**O** Regular limit order

**B** - User Defined Block order

**I** - Iceberg order

**L** - Balance order

**S** - Stop limit order

**P** - OTC order
            </xs:documentation>
        </xs:annotation>
        <xs:restriction base="xs:string">
            <xs:maxLength value="1"/>
            <xs:enumeration value="O"/>
            <xs:enumeration value="B"/>
            <xs:enumeration value="I"/>
            <xs:enumeration value="L"/>
            <xs:enumeration value="S"/>
            <xs:enumeration value="P"/>
        </xs:restriction>
    </xs:simpleType>

    <xs:simpleType name="acctTypCodeGrpType">
        <xs:annotation>
            <xs:documentation>
The account type group. Valid values:

**A** or **A1**..**A9** - Agent account

**P** or **P1**..**P9** - Proprietary account
            </xs:documentation>
        </xs:annotation>
        <xs:restriction base="xs:string">
            <xs:maxLength value="2"/>
        </xs:restriction>
    </xs:simpleType>

    <xs:simpleType name="listIdType">
        <xs:annotation>
            <xs:documentation>
The "List Id" of a basket order.

Conditions: Present if the order is a part of a basket.
            </xs:documentation>
        </xs:annotation>
        <xs:restriction base="xs:long">
        </xs:restriction>
    </xs:simpleType>

    <xs:simpleType name="listExecInstType">
        <xs:annotation>
            <xs:documentation>
The execution instruction of a basket order. Valid values:

**LNKD** - All orders of the basket or none will be executed.

**NONE** - No execution instruction

**VALID** - Either all orders of the basket are valid or all orders are rejected.

Conditions: Present if the order is a part of a basket.
            </xs:documentation>
        </xs:annotation>
        <xs:restriction base="xs:string">
            <xs:maxLength value="6"/>
            <xs:enumeration value="LNKD"/>
            <xs:enumeration value="VALID"/>
            <xs:enumeration value="NONE"/>
        </xs:restriction>
    </xs:simpleType>

    <xs:simpleType name="revisionNoType">
        <xs:annotation>
            <xs:documentation>
This field contains the revision number of the maintenance step. Initial value is 1. When a local order or an order created by M7 as a result of AOT is modified, the value is increased by one.
<br/>When a remote order is modified, the value may be increased by more than one, because the maintenance actions that were performed only locally (e.g. storing an order locally on M7 before forwarding it to XBID) are excluded from the report.<br />
Both for remote and local orders, it can only be guaranteed that the *revisionNo* will be always monotonically increasing, but not that the delta will always be one.
            </xs:documentation>
        </xs:annotation>
        <xs:restriction base="xs:long">
            <xs:totalDigits value="20"/>
        </xs:restriction>
    </xs:simpleType>

    <xs:simpleType name="stateType">
        <xs:annotation>
            <xs:documentation>
The current state of the order in the system. Valid values:

**HIBE** : The order is entered into the backend system but is not exposed to the market.

**ACTI** : The order is entered and is immediately exposed to the market for execution.

**IACT** : The order is deleted.
            </xs:documentation>
        </xs:annotation>
        <xs:restriction base="xs:string">
            <xs:maxLength value="4"/>
        </xs:restriction>
    </xs:simpleType>

    <xs:simpleType name="actionType">
        <xs:annotation>
            <xs:documentation>
The action code. Valid values:

**UADD** : Order added by the user.

**UHIB** : Order deactivated by the user.

**UMOD** : Order modified by the user.

**UDEL** : Order deleted by the user.

**UREJ** : Pre-arranged order rejected by the user.

**AADD** : Order added by market operations on behalf.

**AHIB** : Order deactivated by market operations on behalf.

**AMOD** : Order modified by market operations on behalf.

**ADEL** : Order deleted by market operations on behalf.

**AREJ** : Pre-arranged order rejected by market operations on behalf.

**SADD** : Order added by the system.

**SHIB** : Order deactivated by the system.

**SMOD** : Order modified by the system.

**SDEL** : Order deleted by the system.

**SREJ** : Pre-arranged order rejected by system.

**FEXE** : Order is fully executed.

**PEXE** : Partial execution of order.

**IADD** : A new slice of an Iceberg order was added to the service.
            </xs:documentation>
        </xs:annotation>
        <xs:restriction base="xs:string">
            <xs:maxLength value="255"/>
        </xs:restriction>
    </xs:simpleType>

    <xs:simpleType name="validityRestrictionType">
        <xs:annotation>
            <xs:documentation>
The validity restriction of an order.

**GFS** - Good For Session

**GTD** - Good Till Date

**NON** - None, if the execution restriction is "IOC" or "FOK".
            </xs:documentation>
        </xs:annotation>
        <xs:restriction base="xs:string">
            <xs:maxLength value="3"/>
            <xs:enumeration value="GTD"/>
            <xs:enumeration value="GFS"/>
            <xs:enumeration value="NON"/>
        </xs:restriction>
    </xs:simpleType>

    <xs:simpleType name="orderResCodType">
        <xs:annotation>
            <xs:documentation>
The execution restriction of the order. Valid values:

**NON** - No restriction. This is the default.

**FOK** - (Fill or Kill): The order is immediately fully executed or deleted.

**IOC** - (Immediate and cancel): The order is executed immediately to its maximum extend. In case of a
partial execution, the remaining volume is removed from the order book.

**AON** - (All or None): The order must be filled completely or not at all. The order stays in the order
book until it is executed or removed by the system or user.
            </xs:documentation>
        </xs:annotation>
        <xs:restriction base="xs:string">
            <xs:maxLength value="3"/>
            <xs:enumeration value="NON"/>
            <xs:enumeration value="FOK"/>
            <xs:enumeration value="IOC"/>
            <xs:enumeration value="AON"/>
        </xs:restriction>
    </xs:simpleType>

    <xs:simpleType name="aggressorIndicatorType">
        <xs:annotation>
            <xs:documentation>
Indicates whether the executed order was as a trade aggressor or as a trade originator. Valid values:

**Y**- Trade aggressor

**N** - Trade originator

**U** - Unknown, used for executed orders of remote products, orders transferred to linked contracts and
data before migration

Condition: Present if the action of the order is either "FEXE" (full match) or "PEXE" (partial match).
            </xs:documentation>
        </xs:annotation>
        <xs:restriction base="xs:string">
            <xs:maxLength value="1"/>
            <xs:enumeration value="Y"/>
            <xs:enumeration value="N"/>
            <xs:enumeration value="U"/>
        </xs:restriction>
    </xs:simpleType>

    <xs:simpleType name="remoteOrderIdType">
        <xs:annotation>
            <xs:documentation>
The Order Id as returned by remote backend system (i.e. XBID SOB)
            </xs:documentation>
        </xs:annotation>
        <xs:restriction base="xs:long">
        </xs:restriction>
    </xs:simpleType>

    <xs:simpleType name="remoteOrderRevisionType">
        <xs:annotation>
            <xs:documentation>
An order version as returned by a remote backend system (i.e. XBID SOB)
            </xs:documentation>
        </xs:annotation>
        <xs:restriction base="xs:long" />
    </xs:simpleType>

    <xs:simpleType name="tradeIdType">
        <xs:annotation>
            <xs:documentation>
The trade Id. Present only if a new revision was created because of an order match.
            </xs:documentation>
        </xs:annotation>
        <xs:restriction base="xs:long"/>
    </xs:simpleType>

    <xs:simpleType name="IntRange100">
        <xs:annotation>
            <xs:documentation>Integer field with a value in the range 1-100</xs:documentation>
        </xs:annotation>
        <xs:restriction base="xs:integer">
            <xs:minInclusive value="1"/>
            <xs:maxInclusive value="100"/>
        </xs:restriction>
    </xs:simpleType>

</xs:schema>
