<?xml version="1.0" encoding="UTF-8"?>
<!--Schema for OSCI Message Meta Data - last edited 2015-02-19--><!--Change 2015-02-19: MessageType amended by mandatory attribte @payloadSchema--><!--Change 2015-01-23: Alignment with XTA/KoSIT: introduced KeyCodeType, changed PropertyType, BusinessScenarioType, MessageType; ServiceQuality (to #any type), SecurityToken may carry IDREF attribute to token in payload now; usage attribute mandatory now--><!--Change 2014-11-30: xoev basis data type schema version changed from 1_0 to 1_1--><!--Last recent changes: Codelist for BusinessScenarioTypes defined and imported--><!--Changes: 2.0.2: Adoption of xoev:Codelist type for some elements; eliminating QName typed attributes/elements; PartyType elements now may include optional SecurityTokens (as e.g. used in XVergabe)--><xs:schema targetNamespace="http://www.osci.eu/ws/2014/10/transport" elementFormDefault="qualified" attributeFormDefault="unqualified" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:oscimeta="http://www.osci.eu/ws/2014/10/transport" xmlns:wsa="http://www.w3.org/2005/08/addressing" xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:xoev-dt="http://xoev.de/schemata/basisdatentypen/1_1">
  <xs:import namespace="http://www.w3.org/2005/08/addressing" schemaLocation="ws-addr.xsd"/>
  <xs:import namespace="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" schemaLocation="oasis-200401-wss-wssecurity-secext-1.0.xsd"/>
  <xs:import namespace="http://xoev.de/schemata/basisdatentypen/1_1" schemaLocation="xoev-basisdatentypen.xsd"/>
  <xs:simpleType name="NonEmptyStringType">
    <xs:restriction base="xs:string">
      <xs:minLength value="1"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="NonEmptyURIType">
    <xs:restriction base="xs:anyURI">
      <xs:minLength value="1"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:complexType name="AnyType" mixed="true">
    <xs:sequence minOccurs="0" maxOccurs="unbounded">
      <xs:any namespace="##any" processContents="lax"/>
    </xs:sequence>
    <xs:anyAttribute namespace="##any"/>
  </xs:complexType>
  <!--End AnyType-->
  <xs:complexType name="ReceiptRequestType">
    <xs:sequence>
      <xs:element name="Submission" minOccurs="0">
        <xs:annotation>
          <xs:documentation>Sending node: Message accepted for delivery and submitted</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="Relay" minOccurs="0">
        <xs:annotation>
          <xs:documentation>Active node on the delivery route: Message forwarded to next hop</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="Delivery" minOccurs="0">
        <xs:annotation>
          <xs:documentation>Destination node:Successful  delivery to Recipient in synchronous scenarios, to MsgBox if asynchronous</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="Fetch" minOccurs="0">
        <xs:annotation>
          <xs:documentation>Only MsgBox node: Initial fetch of Message by Recipient from his MsgBox</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="Reception" minOccurs="0">
        <xs:annotation>
          <xs:documentation>Ultimate Recipient node, after  acceptance of message, after successful decryption of payload</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="ReceiptTo" type="wsa:EndpointReferenceType" minOccurs="0"/>
    </xs:sequence>
  </xs:complexType>
  <xs:complexType name="DeliveryAttributesType">
    <xs:annotation>
      <xs:documentation>Message delivery time instants, quality and receipts requested</xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:annotation>
        <xs:documentation>Timestamps, priority etc.</xs:documentation>
      </xs:annotation>
      <xs:element name="Origin" type="xs:dateTime" minOccurs="0">
        <xs:annotation>
          <xs:documentation>Production of content by Requester respective (response) Provider</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="InitialSend" type="xs:dateTime" minOccurs="0">
        <xs:annotation>
          <xs:documentation>Time when delivery was started (submission by Senders node)</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="NotBefore" type="xs:dateTime" minOccurs="0">
        <xs:annotation>
          <xs:documentation>Time when sending node should submit message</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="ObsoleteAfter" type="xs:date" minOccurs="0">
        <xs:annotation>
          <xs:documentation>Date, when this message is obsolete; may be set by Initiator</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="Delivery" type="xs:dateTime" minOccurs="0">
        <xs:annotation>
          <xs:documentation>Time of entry in a Recipients MsgBox or reception by Recipient in synchronous case</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="InitialFetch" type="xs:dateTime" minOccurs="0">
        <xs:annotation>
          <xs:documentation>Time of first comitted fetch from MsgBox by  recipient</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="Reception" type="xs:dateTime" minOccurs="0">
        <xs:annotation>
          <xs:documentation>Reception time set by the Ultimate Recipient ("Reader", target application)</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="ServiceQuality" type="oscimeta:NonEmptyStringType" minOccurs="0">
        <xs:annotation>
          <xs:documentation>Property like priority etc. - XTA here points to "Service Profile"</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="ReceiptRequests" type="oscimeta:ReceiptRequestType" minOccurs="0">
        <xs:annotation>
          <xs:documentation>Receipts requested by sender or author</xs:documentation>
        </xs:annotation>
      </xs:element>
    </xs:sequence>
  </xs:complexType>
  <xs:element name="SecurityToken">
    <xs:complexType>
      <xs:choice>
        <xs:element ref="wsse:BinarySecurityToken"/>
        <xs:element ref="wsse:SecurityTokenReference"/>
        <xs:element ref="wsse:UsernameToken"/>
      </xs:choice>
      <xs:attribute name="usage" use="required">
        <xs:simpleType>
          <xs:restriction base="xs:NMTOKEN">
            <xs:enumeration value="AUTHENTICATION"/>
            <xs:enumeration value="ENCRYPTION"/>
            <xs:enumeration value="SIGNATURE"/>
          </xs:restriction>
        </xs:simpleType>
      </xs:attribute>
      <xs:attribute name="payloadRef" type="xs:IDREF"/>
    </xs:complexType>
  </xs:element>
  <xs:complexType name="PartyType">
    <xs:annotation>
      <xs:documentation>Logical identifier and optional security tokens of that entity (binary, may carry SAML, too)</xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element name="Identifier" type="oscimeta:PartyIdentifierType"/>
      <xs:element ref="oscimeta:SecurityToken" minOccurs="0" maxOccurs="unbounded"/>
    </xs:sequence>
  </xs:complexType>
  <xs:complexType name="PartyIdentifierType">
    <xs:annotation>
      <xs:documentation>Value of generic party identifier, as classified by @type attribute,  e.g.: Prefix:Kennung</xs:documentation>
    </xs:annotation>
    <xs:simpleContent>
      <xs:extension base="xs:normalizedString">
        <xs:attribute name="type" type="oscimeta:NonEmptyStringType">
          <xs:annotation>
            <xs:documentation>Orientation: ebMS Core: type, how to interpret Party-Id value, e.g.: xöv oder Justiz</xs:documentation>
          </xs:annotation>
        </xs:attribute>
        <xs:attribute name="name" type="oscimeta:NonEmptyStringType">
          <xs:annotation>
            <xs:documentation>optional "friendly name" value for displaying in user agents (as e.g. known from eMail)</xs:documentation>
          </xs:annotation>
        </xs:attribute>
        <xs:attribute name="category" type="oscimeta:NonEmptyStringType">
          <xs:annotation>
            <xs:documentation>Concrete role of party in business scenario (e.g. "buyer", "Meldehörde", "Standesamt"...)</xs:documentation>
          </xs:annotation>
        </xs:attribute>
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>
  <xs:element name="Author" type="oscimeta:PartyType">
    <xs:annotation>
      <xs:documentation>Requester resp. (response-) Provider</xs:documentation>
    </xs:annotation>
  </xs:element>
  <xs:element name="Reader" type="oscimeta:PartyType">
    <xs:annotation>
      <xs:documentation>Destinations of the message</xs:documentation>
    </xs:annotation>
  </xs:element>
  <xs:complexType name="OriginatorsType">
    <xs:sequence>
      <xs:element ref="oscimeta:Author"/>
      <xs:element ref="oscimeta:Sender" minOccurs="0"/>
      <xs:element name="ReplyTo" type="oscimeta:PartyType" minOccurs="0">
        <xs:annotation>
          <xs:documentation>If response expected different from value outlined in "From" address</xs:documentation>
        </xs:annotation>
      </xs:element>
    </xs:sequence>
  </xs:complexType>
  <xs:complexType name="DestinationsType">
    <xs:sequence>
      <xs:element ref="oscimeta:Reader">
        <xs:annotation>
          <xs:documentation>Ultimate target of the message</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element ref="oscimeta:OtherDestinations" minOccurs="0"/>
    </xs:sequence>
  </xs:complexType>
  <xs:complexType name="ProcessIdentifierType">
    <xs:annotation>
      <xs:documentation>Process ID message is realated to</xs:documentation>
    </xs:annotation>
    <xs:simpleContent>
      <xs:extension base="oscimeta:NonEmptyStringType">
        <xs:attribute name="ProccesName" type="oscimeta:NonEmptyStringType">
          <xs:annotation>
            <xs:documentation>Process may have a name, e.g. "order"</xs:documentation>
          </xs:annotation>
        </xs:attribute>
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>
  <xs:complexType name="MsgIdentificationType">
    <xs:sequence>
      <xs:element ref="wsa:MessageID"/>
      <xs:element name="In-Reply-To" type="wsa:AttributedURIType" minOccurs="0" maxOccurs="unbounded">
        <xs:annotation>
          <xs:documentation>Referenced application level Message-Id(s)</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="ProcessRef" minOccurs="0">
        <xs:annotation>
          <xs:documentation>References to business process-id's (like ebMS Conversation-Id, "Aktenzeichen" in Germany)</xs:documentation>
        </xs:annotation>
        <xs:complexType>
          <xs:sequence>
            <xs:element name="Requester" type="oscimeta:ProcessIdentifierType" minOccurs="0">
              <xs:annotation>
                <xs:documentation>Ref on requester (Source Application) side</xs:documentation>
              </xs:annotation>
            </xs:element>
            <xs:element name="Responder" type="oscimeta:ProcessIdentifierType" minOccurs="0">
              <xs:annotation>
                <xs:documentation>Ref on responder (Target Application) side, if different</xs:documentation>
              </xs:annotation>
            </xs:element>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
    </xs:sequence>
  </xs:complexType>
  <xs:complexType name="KeyCodeType">
    <xs:complexContent>
      <xs:restriction base="xoev-dt:Code">
        <xs:sequence>
          <xs:element name="code" type="xs:token" form="unqualified"/>
          <xs:element name="name" type="xs:normalizedString" form="unqualified" minOccurs="0"/>
        </xs:sequence>
        <xs:attribute name="listURI" type="xs:anyURI" use="required"/>
        <xs:attribute name="listVersionID" type="xs:normalizedString" use="required"/>
      </xs:restriction>
    </xs:complexContent>
  </xs:complexType>
  <xs:complexType name="PropertyType">
    <xs:sequence>
      <xs:element name="Key" type="oscimeta:KeyCodeType"/>
      <xs:element name="Value" type="oscimeta:NonEmptyStringType"/>
    </xs:sequence>
  </xs:complexType>
  <xs:complexType name="MessagePropertiesType">
    <xs:sequence>
      <xs:element name="Property" type="oscimeta:PropertyType" maxOccurs="unbounded"/>
    </xs:sequence>
  </xs:complexType>
  <xs:complexType name="QualifierType">
    <xs:sequence>
      <xs:element name="Subject" type="xs:string" minOccurs="0">
        <xs:annotation>
          <xs:documentation>Message subject text (informational)</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="Service" type="xs:anyURI">
        <xs:annotation>
          <xs:documentation>Distinct  service in a certain business scenario context; in the XÖV context this is the "Dienste URI"</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="BusinessScenario">
        <xs:annotation>
          <xs:documentation>Domain qualifier, e.g. Meldewesen, XVergabe...</xs:documentation>
        </xs:annotation>
        <xs:complexType>
          <xs:choice>
            <xs:element name="Defined" type="oscimeta:KeyCodeType"/>
            <xs:element name="Undefined" type="xs:normalizedString"/>
          </xs:choice>
        </xs:complexType>
      </xs:element>
      <xs:element name="MessageType">
        <xs:annotation>
          <xs:documentation>Payload: Type of document or message. MessageTypes normally bound to specific BusinessScenario</xs:documentation>
        </xs:annotation>
        <xs:complexType>
          <xs:complexContent>
            <xs:extension base="oscimeta:KeyCodeType">
              <xs:attribute name="payloadSchema" type="oscimeta:NonEmptyURIType" use="required"/>
            </xs:extension>
          </xs:complexContent>
        </xs:complexType>
      </xs:element>
    </xs:sequence>
  </xs:complexType>
  <xs:element name="DeliveryAttributes" type="oscimeta:DeliveryAttributesType">
    <xs:annotation>
      <xs:documentation>Time stamps, receipts to be generated, service quality</xs:documentation>
    </xs:annotation>
  </xs:element>
  <xs:element name="Originators" type="oscimeta:OriginatorsType">
    <xs:annotation>
      <xs:documentation>Message originators and reply address</xs:documentation>
    </xs:annotation>
  </xs:element>
  <xs:element name="Destinations" type="oscimeta:DestinationsType">
    <xs:annotation>
      <xs:documentation>Actual and other destinations of Message</xs:documentation>
    </xs:annotation>
  </xs:element>
  <xs:element name="MsgIdentification" type="oscimeta:MsgIdentificationType">
    <xs:annotation>
      <xs:documentation>Message ID and Message relations</xs:documentation>
    </xs:annotation>
  </xs:element>
  <xs:element name="Qualifier" type="oscimeta:QualifierType">
    <xs:annotation>
      <xs:documentation>General payload properties, common to all scenarios</xs:documentation>
    </xs:annotation>
  </xs:element>
  <xs:element name="MessageProperties">
    <xs:annotation>
      <xs:documentation>Scenarios specific payload properties, to be agreed upon per scenario</xs:documentation>
    </xs:annotation>
    <xs:complexType>
      <xs:sequence>
        <xs:element name="Property" type="oscimeta:PropertyType" maxOccurs="unbounded"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="Sender" type="oscimeta:PartyType">
    <xs:annotation>
      <xs:documentation>Sending node, entry may be added by Sender node</xs:documentation>
    </xs:annotation>
  </xs:element>
  <xs:element name="OtherDestinations">
    <xs:annotation>
      <xs:documentation>Other destinations of message - informational, as known from e-mail</xs:documentation>
    </xs:annotation>
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="oscimeta:OtherReaders" maxOccurs="unbounded"/>
        <xs:element ref="oscimeta:CcReaders" minOccurs="0" maxOccurs="unbounded"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="OtherReaders" type="oscimeta:PartyIdentifierType"/>
  <xs:element name="CcReaders" type="oscimeta:PartyIdentifierType">
    <xs:annotation>
      <xs:documentation>Destinations in cc role</xs:documentation>
    </xs:annotation>
  </xs:element>
  <xs:element name="MessageMetaData">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="oscimeta:DeliveryAttributes"/>
        <xs:element ref="oscimeta:Originators"/>
        <xs:element ref="oscimeta:Destinations"/>
        <xs:element ref="oscimeta:MsgIdentification"/>
        <xs:element ref="oscimeta:Qualifier"/>
        <xs:element ref="oscimeta:MessageProperties" minOccurs="0"/>
        <xs:element name="MsgSize" type="xs:positiveInteger" minOccurs="0">
          <xs:annotation>
            <xs:documentation>Message size in bytes</xs:documentation>
          </xs:annotation>
        </xs:element>
      </xs:sequence>
      <xs:attribute name="TestMsg" type="xs:boolean" default="false">
        <xs:annotation>
          <xs:documentation>"true", if test-message; defaults to "false"</xs:documentation>
        </xs:annotation>
      </xs:attribute>
    </xs:complexType>
  </xs:element>
</xs:schema>