<?xml version="1.0"?>
<schema targetNamespace="http://docs.oasis-open.org/business-transaction/business_transaction-btp-1.1-core-schema-wd-05.xsd"
        elementFormDefault="qualified" xmlns="http://www.w3.org/2001/XMLSchema"
        xmlns:btp="http://docs.oasis-open.org/business-transaction/business_transaction-btp-1.1-core-schema-wd-05.xsd">
    <!-- Qualifiers -->
    <complexType name="qualifier-type" mixed="true">
        <complexContent mixed="true">
            <restriction base="anyType">
                <sequence>
                    <any processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
                </sequence>
                <attribute name="must-be-understood" type="boolean" use="optional" default="true"/>
                <attribute name="to-be-propagated" type="boolean" use="optional" default="false"/>
            </restriction>
        </complexContent>
    </complexType>
    <element name="qualifier" type="btp:qualifier-type" abstract="true"/>
    <element name="qualifiers">
        <complexType>
            <choice>
                <element ref="btp:qualifier" minOccurs="0" maxOccurs="unbounded"/>
                <any processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
            </choice>
        </complexType>
    </element>
    <!-- example qualifier definition:
        <element name="some-qualifer" type="btp:qualifier-type" substitutionGroup="btp:qualifier"/>
    -->
    <!-- Message set data types -->
    <simpleType name="identifier">
        <restriction base="anyURI"/>
    </simpleType>
    <simpleType name="additional-information">
        <restriction base="string"/>
    </simpleType>
    <complexType name="address">
        <sequence>
            <element name="binding-name" type="string"/>
            <element name="binding-address" type="string"/>
            <element name="additional-information" type="btp:additional-information" minOccurs="0"/>
        </sequence>
        <attribute name="priority" type="positiveInteger" use="optional" default="1"/>
    </complexType>
    <simpleType name="superior-type">
        <restriction base="string">
            <enumeration value="cohesion"/>
            <enumeration value="atom"/>
        </restriction>
    </simpleType>
    <simpleType name="transaction-type">
        <restriction base="string">
            <enumeration value="cohesion"/>
            <enumeration value="atom"/>
        </restriction>
    </simpleType>
    <!-- Compounding -->
    <element name="messages">
        <complexType>
            <sequence>
                <element ref="btp:message" minOccurs="0" maxOccurs="unbounded"/>
            </sequence>
        </complexType>
    </element>
    <element name="related-group" substitutionGroup="btp:message">
        <complexType>
            <sequence>
                <element ref="btp:message" minOccurs="0" maxOccurs="unbounded"/>
            </sequence>
        </complexType>
    </element>
    <!-- Message set -->
    <element name="message" abstract="true"/>
    <element name="context" substitutionGroup="btp:message">
        <complexType>
            <sequence>
                <element name="superior-address" type="btp:address" maxOccurs="unbounded"/>
                <element name="superior-identifier" type="btp:identifier"/>
                <element name="superior-type" type="btp:superior-type" default="atom" minOccurs="0"/>
                <element ref="btp:qualifiers" minOccurs="0"/>
                <element name="reply-address" type="btp:address" minOccurs="0"/>
            </sequence>
            <attribute name="id" type="ID" use="optional"/>
        </complexType>
    </element>
    <element name="context-reply" substitutionGroup="btp:message">
        <complexType>
            <sequence>
                <element name="superior-identifier" type="btp:identifier"/>
                <element name="inferior-identifier" type="btp:identifier" minOccurs="0"/>
                <element name="completion-status">
                    <simpleType>
                        <restriction base="string">
                            <enumeration value="completed"/>
                            <enumeration value="incomplete"/>
                            <enumeration value="related"/>
                            <enumeration value="repudiated"/>
                        </restriction>
                    </simpleType>
                </element>
                <element ref="btp:qualifiers" minOccurs="0"/>
                <element name="target-additional-information" type="btp:additional-information" minOccurs="0"/>
            </sequence>
            <attribute name="id" type="ID" use="optional"/>
        </complexType>
    </element>
    <element name="request-status" substitutionGroup="btp:message">
        <complexType>
            <sequence>
                <element name="target-identifier" type="btp:identifier"/>
                <element ref="btp:qualifiers" minOccurs="0"/>
                <element name="target-additional-information" type="btp:additional-information" minOccurs="0"/>
                <element name="reply-address" type="btp:address" minOccurs="0"/>
            </sequence>
            <attribute name="id" type="ID" use="optional"/>
        </complexType>
    </element>
    <element name="status" substitutionGroup="btp:message">
        <complexType>
            <sequence>
                <element name="responders-identifier" type="btp:identifier"/>
                <element name="status-value">
                    <simpleType>
                        <restriction base="string">
                            <enumeration value="created"/>
                            <enumeration value="enrolling"/>
                            <enumeration value="active"/>
                            <enumeration value="resigning"/>
                            <enumeration value="resigned"/>
                            <enumeration value="preparing"/>
                            <enumeration value="prepared"/>
                            <enumeration value="confirming"/>
                            <enumeration value="confirmed"/>
                            <enumeration value="cancelling"/>
                            <enumeration value="cancelled"/>
                            <enumeration value="cancel-contradiction"/>
                            <enumeration value="confirm-contradiction"/>
                            <enumeration value="hazard"/>
                            <enumeration value="contradicted"/>
                            <enumeration value="unknown"/>
                            <enumeration value="inaccessible"/>
                        </restriction>
                    </simpleType>
                </element>
                <element ref="btp:qualifiers" minOccurs="0"/>
                <element name="target-additional-information" type="btp:additional-information" minOccurs="0"/>
            </sequence>
            <attribute name="id" type="ID" use="optional"/>
        </complexType>
    </element>
    <element name="fault" substitutionGroup="btp:message">
        <complexType>
            <sequence>
                <element name="superior-identifier" type="btp:identifier" minOccurs="0"/>
                <element name="inferior-identifier" type="btp:identifier" minOccurs="0"/>
                <element name="fault-type">
                    <simpleType>
                        <restriction base="string">
                            <enumeration value="communication-failure"/>
                            <enumeration value="duplicate-inferior"/>
                            <enumeration value="general"/>
                            <enumeration value="invalid-decider"/>
                            <enumeration value="invalid-inferior"/>
                            <enumeration value="invalid-superior"/>
                            <enumeration value="status-refused"/>
                            <enumeration value="invalid-terminator"/>
                            <enumeration value="unknown-parameter"/>
                            <enumeration value="unknown-transaction"/>
                            <enumeration value="unsupported-qualifier"/>
                            <enumeration value="wrong-state"/>
                            <enumeration value="redirect"/>
                        </restriction>
                    </simpleType>
                </element>
                <element name="fault-text" type="string" minOccurs="0"/>
                <element name="fault-data" type="anyType" minOccurs="0"/>
                <element ref="btp:qualifiers" minOccurs="0"/>
                <element name="target-additional-information" type="btp:additional-information" minOccurs="0"/>
            </sequence>
            <attribute name="id" type="ID" use="optional"/>
        </complexType>
    </element>
    <element name="enrol" substitutionGroup="btp:message">
        <complexType>
            <sequence>
                <element name="superior-identifier" type="btp:identifier"/>
                <element name="response-requested" type="boolean" default="false" minOccurs="0"/>
                <element name="inferior-address" type="btp:address" maxOccurs="unbounded"/>
                <element name="inferior-identifier" type="btp:identifier"/>
                <element ref="btp:qualifiers" minOccurs="0"/>
                <element name="target-additional-information" type="btp:additional-information" minOccurs="0"/>
                <element name="reply-address" type="btp:address" minOccurs="0"/>
            </sequence>
            <attribute name="id" type="ID" use="optional"/>
        </complexType>
    </element>
    <element name="enrolled" substitutionGroup="btp:message">
        <complexType>
            <sequence>
                <element name="superior-identifier" type="btp:identifier"/>
                <element name="inferior-identifier" type="btp:identifier"/>
                <element ref="btp:qualifiers" minOccurs="0"/>
                <element name="target-additional-information" type="btp:additional-information" minOccurs="0"/>
                <element name="sender-address" type="btp:address" minOccurs="0"/>
            </sequence>
            <attribute name="id" type="ID" use="optional"/>
        </complexType>
    </element>
    <element name="resign" substitutionGroup="btp:message">
        <complexType>
            <sequence>
                <element name="superior-identifier" type="btp:identifier"/>
                <element name="inferior-identifier" type="btp:identifier"/>
                <element name="response-requested" type="boolean" default="false" minOccurs="0"/>
                <element ref="btp:qualifiers" minOccurs="0"/>
                <element name="target-additional-information" type="btp:additional-information" minOccurs="0"/>
                <element name="sender-address" type="btp:address" minOccurs="0"/>
            </sequence>
            <attribute name="id" type="ID" use="optional"/>
        </complexType>
    </element>
    <element name="resigned" substitutionGroup="btp:message">
        <complexType>
            <sequence>
                <element name="superior-identifier" type="btp:identifier"/>
                <element name="inferior-identifier" type="btp:identifier"/>
                <element ref="btp:qualifiers" minOccurs="0"/>
                <element name="target-additional-information" type="btp:additional-information" minOccurs="0"/>
                <element name="sender-address" type="btp:address" minOccurs="0"/>
            </sequence>
            <attribute name="id" type="ID" use="optional"/>
        </complexType>
    </element>
    <element name="prepare" substitutionGroup="btp:message">
        <complexType>
            <sequence>
                <element name="superior-identifier" type="btp:identifier"/>
                <element name="inferior-identifier" type="btp:identifier"/>
                <element ref="btp:qualifiers" minOccurs="0"/>
                <element name="target-additional-information" type="btp:additional-information" minOccurs="0"/>
                <element name="sender-address" type="btp:address" minOccurs="0"/>
            </sequence>
            <attribute name="id" type="ID" use="optional"/>
        </complexType>
    </element>
    <element name="prepared" substitutionGroup="btp:message">
        <complexType>
            <sequence>
                <element name="superior-identifier" type="btp:identifier"/>
                <element name="inferior-identifier" type="btp:identifier"/>
                <element name="default-is-cancel" type="boolean"/>
                <element ref="btp:qualifiers" minOccurs="0"/>
                <element name="target-additional-information" type="btp:additional-information" minOccurs="0"/>
                <element name="sender-address" type="btp:address" minOccurs="0"/>
            </sequence>
            <attribute name="id" type="ID" use="optional"/>
        </complexType>
    </element>
    <element name="confirm" substitutionGroup="btp:message">
        <complexType>
            <sequence>
                <element name="superior-identifier" type="btp:identifier"/>
                <element name="inferior-identifier" type="btp:identifier"/>
                <element ref="btp:qualifiers" minOccurs="0"/>
                <element name="target-additional-information" type="btp:additional-information" minOccurs="0"/>
                <element name="sender-address" type="btp:address" minOccurs="0"/>
            </sequence>
            <attribute name="id" type="ID" use="optional"/>
        </complexType>
    </element>
    <element name="confirmed" substitutionGroup="btp:message">
        <complexType>
            <sequence>
                <element name="superior-identifier" type="btp:identifier"/>
                <element name="inferior-identifier" type="btp:identifier"/>
                <element name="confirm-received" type="boolean"/>
                <element ref="btp:qualifiers" minOccurs="0"/>
                <element name="target-additional-information" type="btp:additional-information" minOccurs="0"/>
                <element name="sender-address" type="btp:address" minOccurs="0"/>
            </sequence>
            <attribute name="id" type="ID" use="optional"/>
        </complexType>
    </element>
    <element name="cancel" substitutionGroup="btp:message">
        <complexType>
            <sequence>
                <element name="superior-identifier" type="btp:identifier"/>
                <element name="inferior-identifier" type="btp:identifier"/>
                <element ref="btp:qualifiers" minOccurs="0"/>
                <element name="target-additional-information" type="btp:additional-information" minOccurs="0"/>
                <element name="sender-address" type="btp:address" minOccurs="0"/>
            </sequence>
            <attribute name="id" type="ID" use="optional"/>
        </complexType>
    </element>
    <element name="cancelled" substitutionGroup="btp:message">
        <complexType>
            <sequence>
                <element name="superior-identifier" type="btp:identifier"/>
                <element name="inferior-identifier" type="btp:identifier" minOccurs="0"/>
                <element ref="btp:qualifiers" minOccurs="0"/>
                <element name="target-additional-information" type="btp:additional-information" minOccurs="0"/>
                <element name="sender-address" type="btp:address" minOccurs="0"/>
            </sequence>
            <attribute name="id" type="ID" use="optional"/>
        </complexType>
    </element>
    <element name="confirm-one-phase" substitutionGroup="btp:message">
        <complexType>
            <sequence>
                <element name="superior-identifier" type="btp:identifier"/>
                <element name="inferior-identifier" type="btp:identifier"/>
                <element ref="btp:qualifiers" minOccurs="0"/>
                <element name="target-additional-information" type="btp:additional-information" minOccurs="0"/>
                <element name="sender-address" type="btp:address" minOccurs="0"/>
            </sequence>
            <attribute name="id" type="ID" use="optional"/>
        </complexType>
    </element>
    <element name="hazard" substitutionGroup="btp:message">
        <complexType>
            <sequence>
                <element name="superior-identifier" type="btp:identifier"/>
                <element name="inferior-identifier" type="btp:identifier"/>
                <element name="level">
                    <simpleType>
                        <restriction base="string">
                            <enumeration value="mixed"/>
                            <enumeration value="possible"/>
                        </restriction>
                    </simpleType>
                </element>
                <element ref="btp:qualifiers" minOccurs="0"/>
                <element name="target-additional-information" type="btp:additional-information" minOccurs="0"/>
                <element name="sender-address" type="btp:address" minOccurs="0"/>
            </sequence>
            <attribute name="id" type="ID" use="optional"/>
        </complexType>
    </element>
    <element name="contradiction" substitutionGroup="btp:message">
        <complexType>
            <sequence>
                <element name="superior-identifier" type="btp:identifier"/>
                <element name="inferior-identifier" type="btp:identifier"/>
                <element ref="btp:qualifiers" minOccurs="0"/>
                <element name="target-additional-information" type="btp:additional-information" minOccurs="0"/>
                <element name="sender-address" type="btp:address" minOccurs="0"/>
            </sequence>
            <attribute name="id" type="ID" use="optional"/>
        </complexType>
    </element>
    <element name="superior-state" substitutionGroup="btp:message">
        <complexType>
            <sequence>
                <element name="superior-identifier" type="btp:identifier"/>
                <element name="inferior-identifier" type="btp:identifier"/>
                <element name="status">
                    <simpleType>
                        <restriction base="string">
                            <enumeration value="active"/>
                            <enumeration value="prepared-received"/>
                            <enumeration value="confirmed-received"/>
                            <enumeration value="cancelled-received"/>
                            <enumeration value="contradiction-known"/>
                            <enumeration value="inaccessible"/>
                            <enumeration value="unknown"/>
                        </restriction>
                    </simpleType>
                </element>
                <element name="response-requested" type="boolean" default="false" minOccurs="0"/>
                <element ref="btp:qualifiers" minOccurs="0"/>
                <element name="target-additional-information" type="btp:additional-information" minOccurs="0"/>
                <element name="sender-address" type="btp:address" minOccurs="0"/>
            </sequence>
            <attribute name="id" type="ID" use="optional"/>
        </complexType>
    </element>
    <element name="inferior-state" substitutionGroup="btp:message">
        <complexType>
            <sequence>
                <element name="superior-identifier" type="btp:identifier"/>
                <element name="inferior-identifier" type="btp:identifier"/>
                <element name="status">
                    <simpleType>
                        <restriction base="string">
                            <enumeration value="active"/>
                            <enumeration value="prepare-received"/>
                            <enumeration value="confirm-received"/>
                            <enumeration value="cancel-received"/>
                            <enumeration value="inaccessible"/>
                            <enumeration value="unknown"/>
                        </restriction>
                    </simpleType>
                </element>
                <element name="response-requested" type="boolean" default="false" minOccurs="0"/>
                <element ref="btp:qualifiers" minOccurs="0"/>
                <element name="target-additional-information" type="btp:additional-information" minOccurs="0"/>
                <element name="sender-address" type="btp:address" minOccurs="0"/>
            </sequence>
            <attribute name="id" type="ID" use="optional"/>
        </complexType>
    </element>
    <element name="redirect" substitutionGroup="btp:message">
        <complexType>
            <sequence>
                <element name="superior-identifier" type="btp:identifier" minOccurs="0"/>
                <element name="inferior-identifier" type="btp:identifier"/>
                <element name="old-address" type="btp:address" maxOccurs="unbounded"/>
                <element name="new-address" type="btp:address" maxOccurs="unbounded"/>
                <element ref="btp:qualifiers" minOccurs="0"/>
                <element name="target-additional-information" type="btp:additional-information" minOccurs="0"/>
            </sequence>
            <attribute name="id" type="ID" use="optional"/>
        </complexType>
    </element>
    <element name="begin" substitutionGroup="btp:message">
        <complexType>
            <sequence>
                <element name="transaction-type" type="btp:superior-type"/>
                <element ref="btp:context" minOccurs="0"/>
                <element ref="btp:qualifiers" minOccurs="0"/>
                <element name="target-additional-information" type="btp:additional-information" minOccurs="0"/>
                <element name="reply-address" type="btp:address" minOccurs="0"/>
            </sequence>
            <attribute name="id" type="ID" use="optional"/>
        </complexType>
    </element>
    <element name="begun" substitutionGroup="btp:message">
        <complexType>
            <sequence>
                <element name="decider-address" type="btp:address" minOccurs="0" maxOccurs="unbounded"/>
                <element name="inferior-address" type="btp:address" minOccurs="0" maxOccurs="unbounded"/>
                <element name="transaction-identifier" type="btp:identifier"/>
                <element ref="btp:context"/>
                <element ref="btp:qualifiers" minOccurs="0"/>
                <element name="target-additional-information" type="btp:additional-information" minOccurs="0"/>
            </sequence>
            <attribute name="id" type="ID" use="optional"/>
        </complexType>
    </element>
    <element name="prepare-inferiors" substitutionGroup="btp:message">
        <complexType>
            <sequence>
                <element name="transaction-identifier" type="btp:identifier"/>
                <element name="inferiors-list" minOccurs="0">
                    <complexType>
                        <sequence>
                            <element name="inferior-identifier" type="btp:identifier" maxOccurs="unbounded"/>
                        </sequence>
                    </complexType>
                </element>
                <element ref="btp:qualifiers" minOccurs="0"/>
                <element name="target-additional-information" type="btp:additional-information" minOccurs="0"/>
                <element name="reply-address" type="btp:address" minOccurs="0"/>
            </sequence>
            <attribute name="id" type="ID" use="optional"/>
        </complexType>
    </element>
    <element name="confirm-transaction" substitutionGroup="btp:message">
        <complexType>
            <sequence>
                <element name="transaction-identifier" type="btp:identifier"/>
                <element name="inferiors-list" minOccurs="0">
                    <complexType>
                        <sequence>
                            <element name="inferior-identifier" type="btp:identifier" maxOccurs="unbounded"/>
                        </sequence>
                    </complexType>
                </element>
                <element name="report-hazard" type="boolean"/>
                <element ref="btp:qualifiers" minOccurs="0"/>
                <element name="target-additional-information" type="btp:additional-information" minOccurs="0"/>
                <element name="reply-address" type="btp:address" minOccurs="0"/>
            </sequence>
            <attribute name="id" type="ID" use="optional"/>
        </complexType>
    </element>
    <element name="transaction-confirmed" substitutionGroup="btp:message">
        <complexType>
            <sequence>
                <element name="transaction-identifier" type="btp:identifier"/>
                <element ref="btp:qualifiers" minOccurs="0"/>
                <element name="target-additional-information" type="btp:additional-information" minOccurs="0"/>
            </sequence>
            <attribute name="id" type="ID" use="optional"/>
        </complexType>
    </element>
    <element name="cancel-transaction" substitutionGroup="btp:message">
        <complexType>
            <sequence>
                <element name="transaction-identifier" type="btp:identifier"/>
                <element name="report-hazard" type="boolean"/>
                <element ref="btp:qualifiers" minOccurs="0"/>
                <element name="target-additional-information" type="btp:additional-information" minOccurs="0"/>
                <element name="reply-address" type="btp:address" minOccurs="0"/>
            </sequence>
            <attribute name="id" type="ID" use="optional"/>
        </complexType>
    </element>
    <element name="cancel-inferiors" substitutionGroup="btp:message">
        <complexType>
            <sequence>
                <element name="transaction-identifier" type="btp:identifier"/>
                <element name="inferiors-list">
                    <complexType>
                        <sequence>
                            <element name="inferior-identifier" type="btp:identifier" maxOccurs="unbounded"/>
                        </sequence>
                    </complexType>
                </element>
                <element ref="btp:qualifiers" minOccurs="0"/>
                <element name="target-additional-information" type="btp:additional-information" minOccurs="0"/>
                <element name="reply-address" type="btp:address" minOccurs="0"/>
            </sequence>
            <attribute name="id" type="ID" use="optional"/>
        </complexType>
    </element>
    <element name="transaction-cancelled" substitutionGroup="btp:message">
        <complexType>
            <sequence>
                <element name="transaction-identifier" type="btp:identifier"/>
                <element ref="btp:qualifiers" minOccurs="0"/>
                <element name="target-additional-information" type="btp:additional-information" minOccurs="0"/>
            </sequence>
            <attribute name="id" type="ID" use="optional"/>
        </complexType>
    </element>
    <element name="request-inferior-statuses" substitutionGroup="btp:message">
        <complexType>
            <sequence>
                <element name="target-identifier" type="btp:identifier"/>
                <element name="inferiors-list" minOccurs="0">
                    <complexType>
                        <sequence>
                            <element name="inferior-identifier" type="btp:identifier" maxOccurs="unbounded"/>
                        </sequence>
                    </complexType>
                </element>
                <element ref="btp:qualifiers" minOccurs="0"/>
                <element name="target-additional-information" type="btp:additional-information" minOccurs="0"/>
                <element name="reply-address" type="btp:address" minOccurs="0"/>
            </sequence>
            <attribute name="id" type="ID" use="optional"/>
        </complexType>
    </element>
    <element name="inferior-statuses" substitutionGroup="btp:message">
        <complexType>
            <sequence>
                <element name="responders-identifier" type="btp:identifier"/>
                <element name="status-list">
                    <complexType>
                        <sequence>
                            <element name="status-item" maxOccurs="unbounded">
                                <complexType>
                                    <sequence>
                                        <element name="inferior-identifier" type="btp:identifier"/>
                                        <element name="status">
                                            <simpleType>
                                                <restriction base="string">
                                                    <enumeration value="active"/>
                                                    <enumeration value="resigned"/>
                                                    <enumeration value="preparing"/>
                                                    <enumeration value="prepared"/>
                                                    <enumeration value="autonomously-confirmed"/>
                                                    <enumeration value="autonomously-cancelled"/>
                                                    <enumeration value="confirming"/>
                                                    <enumeration value="confirmed"/>
                                                    <enumeration value="cancelling"/>
                                                    <enumeration value="cancelled"/>
                                                    <enumeration value="cancel-contradiction"/>
                                                    <enumeration value="confirm-contradiction"/>
                                                    <enumeration value="hazard"/>
                                                    <enumeration value="invalid"/>
                                                </restriction>
                                            </simpleType>
                                        </element>
                                        <element ref="btp:qualifiers" minOccurs="0"/>
                                    </sequence>
                                </complexType>
                            </element>
                        </sequence>
                    </complexType>
                </element>
                <element ref="btp:qualifiers" minOccurs="0"/>
                <element name="target-additional-information" type="btp:additional-information" minOccurs="0"/>
            </sequence>
            <attribute name="id" type="ID" use="optional"/>
        </complexType>
    </element>
</schema>
