<?xml version="1.0" encoding="UTF-8"?>

<!-- =================================================================== -->
<!-- RTI Replay XML Schema File                                          -->
<!-- =================================================================== -->
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">

    <!--xs:import namespace="http://www.w3.org/XML/1998/namespace" schemaLocation="http://www.w3.org/2001/xml.xsd" /-->
    <xs:include schemaLocation="definitions/rti_recorder_common_definitions.xsd" />

    <!-- ================================================================== -->
    <!-- Replay Topic and Topic Group Types                                 -->
    <!-- ================================================================== -->
    <xs:complexType name="entityId">
        <xs:choice>
            <xs:element name="entity_guid" type="stringGuid"/>
            <xs:element name="entity_name" type="entityName"/>
        </xs:choice>
    </xs:complexType>

    <xs:complexType name="replayDataWriter">
        <xs:choice minOccurs="0">
            <xs:element name="original_identity"
                        type="entityId"/>
            <xs:sequence>
                <xs:element name="enable_original_sample_info_publication"
                            type="xs:boolean"/>
                <xs:choice>
                    <xs:element name="writer_qos"
                                type="dataWriterQosProfileChild"/>
                    <xs:element name="original_writer_qos"
                                type="entityId"/>
                </xs:choice>
            </xs:sequence>
        </xs:choice>
    </xs:complexType>

    <!-- =================================================================== -->
    <xs:complexType name="replayTopicGroup">
        <xs:all>
            <xs:element name="publish_with_original_info"
                        type="xs:boolean"
                        minOccurs="0">
                <xs:annotation>
                    <xs:documentation>
                         <![CDATA[
                        Writes the data sample as if it came from its original
                        writer.
                        ]]>
                    </xs:documentation>
                </xs:annotation>
            </xs:element>
            <xs:element name="publish_with_original_timestamp"
                        type="xs:boolean"
                        minOccurs="0">
                <xs:annotation>
                    <xs:documentation>
                         <![CDATA[
                        When this tag is true, the data samples read from the
                        input stream are written into the output stream with
                        the same timestamp that was associated with them when
                        they were made available in the input domain.
                        ]]>
                    </xs:documentation>
                </xs:annotation>
            </xs:element>
            <!-- Select topics/types -->
            <xs:element name="allow_topic_name_filter"
                        minOccurs="0"
                        type="nameFilterList">
                <xs:annotation>
                    <xs:documentation>
                        <![CDATA[
                        A regular expression describing which Topics should be
                        replayed.  Topics with names that match this filter are
                        allowed to be replayed, unless they do not pass the
                        additional filters.
                        ]]>
                    </xs:documentation>
                </xs:annotation>
            </xs:element>
            <xs:element name="deny_topic_name_filter"
                        minOccurs="0"
                        type="nameFilterList">
                <xs:annotation>
                    <xs:documentation>
                        <![CDATA[
                        A regular expression describing which Topics should not
                        be replayed.  This is applied after the allow filter.
                        ]]>
                    </xs:documentation>
                </xs:annotation>
            </xs:element>
            <xs:element name="allow_type_name_filter"
                        minOccurs="0"
                        type="nameFilterList">
                <xs:annotation>
                    <xs:documentation>
                        <![CDATA[
                        A regular expression describing a set of type names
                        registered in the DDS domains.  Topics with data types
                        that match this filter are allowed to be replayed.
                        ]]>
                    </xs:documentation>
                </xs:annotation>
            </xs:element>
            <xs:element name="deny_type_name_filter"
                        minOccurs="0"
                        type="nameFilterList">
                <xs:annotation>
                    <xs:documentation>
                        <![CDATA[
                        A regular expression describing a set of type names
                        registerd in the DDS domains to be filtered out.
                        Topics with data types that match this regex are not
                        allowed to be replayed.  This is applied after the
                        allow_type_name_filter.
                        ]]>
                    </xs:documentation>
                </xs:annotation>
            </xs:element>

            <!-- Wait for acknowledgment -->
            <xs:element name="on_delete_wait_for_ack_timeout"
                        type="duration"
                        minOccurs="0"/>

            <!--  Outputs  -->
            <xs:element name="datawriter_qos"
                        type="dataWriterQosProfileChild"
                        minOccurs="0">
                <xs:annotation>
                    <xs:documentation>
                        <![CDATA[
                        Allows you to specify the QoS for all DataWriters
                        created when replaying Topics that match the
                        topic and type name filters.

                        If this is not specified, by default the service will
                        use the first QoS recorded for a DataWriter of each
                        Topic
                        ]]>
                    </xs:documentation>
                </xs:annotation>
            </xs:element>
            <!--xs:element name="enable_original_sample_info_publication"
                        type="xs:boolean"
                        minOccurs="0">
                <xs:annotation>
                    <xs:documentation>
                        <![CDATA[
                        Publishes data samples with original info such as
                        original virtual GUID, sequence number, etc.
                        ]]>
                    </xs:documentation>
                </xs:annotation>
            </xs:element-->
        </xs:all>
        <xs:attribute name="participant_ref"
                      type="elementReference">
            <xs:annotation>
                <xs:documentation>
                    <![CDATA[
                    The DomainParticipant (and domain) to use when replaying
                    this data.
                    ]]>
                </xs:documentation>
            </xs:annotation>
        </xs:attribute>
         <xs:attributeGroup ref="entityNameAttrGroup">
            <xs:annotation>
                <xs:documentation xml:lang="en-US">
                    <![CDATA[
                    Topic group name
                    ]]>
                </xs:documentation>
            </xs:annotation>
        </xs:attributeGroup>


    </xs:complexType>


    <!-- =================================================================== -->

    <xs:complexType name="replayTopic">
        <xs:sequence>
            <!-- DDS topic name -->
            <xs:element name="topic_name"
                        type="xs:string"
                        minOccurs="0">
                <xs:annotation>
                    <xs:documentation xml:lang="en-US">
                        <![CDATA[
                        When defined, this represents the name of the DDS topic
                        to be replayed. If not present, that name is taken from
                        the name attribute of the parent <topic> tag.
                        ]]>
                    </xs:documentation>
                </xs:annotation>
            </xs:element>

            <!-- Type associated with the topic -->
            <xs:element name="registered_type_name"
                        type="xs:string"/>

            <xs:element name="publish_with_original_info"
                        type="xs:boolean"
                        minOccurs="0">
                <xs:annotation>
                    <xs:documentation>
                         <![CDATA[
                        Writes the data sample as if it came from its original
                        writer.
                        ]]>
                    </xs:documentation>
                </xs:annotation>
            </xs:element>
            <xs:element name="publish_with_original_timestamp"
                        type="xs:boolean"
                        minOccurs="0">
                <xs:annotation>
                    <xs:documentation>
                         <![CDATA[
                        When this tag is true, the data samples read from the
                        input stream are written into the output stream with
                        the same timestamp that was associated with them when
                        they were made available in the input domain.
                        ]]>
                    </xs:documentation>
                </xs:annotation>
            </xs:element>

            <!-- Wait for acknowledgment -->
            <xs:element name="on_delete_wait_for_ack_timeout"
                        type="duration"
                        minOccurs="0"/>

            <!--  Data manipulation -->
            <xs:element name="transformation"
                        type="transformation"
                        minOccurs="0"/>

            <!--  Outputs  -->
            <xs:element name="datawriter_qos"
                        type="dataWriterQosProfileChild"
                        minOccurs="0">
                <xs:annotation>
                    <xs:documentation>
                        <![CDATA[
                        Allows you to specify the QoS for the DataWriter
                        created when replaying this Topic

                        If this is not specified, by default the service will
                        use the first QoS recorded for the  DataWriter of this
                        Topic
                        ]]>
                    </xs:documentation>
                </xs:annotation>
            </xs:element>
            <!--xs:element name="enable_original_sample_info_publication"
                        type="xs:boolean"
                        minOccurs="0">
                <xs:annotation>
                    <xs:documentation>
                        <![CDATA[
                        Publishes data samples with original info such as
                        original virtual GUID, sequence number, etc.
                        ]]>
                    </xs:documentation>
                </xs:annotation>
            </xs:element-->
        </xs:sequence>
        <xs:attribute name="participant_ref"
                      type="elementReference">
            <xs:annotation>
                <xs:documentation>
                    <![CDATA[
                    The DomainParticipant (and domain) to use when replaying
                    this data.
                    ]]>
                </xs:documentation>
            </xs:annotation>
        </xs:attribute>
        <xs:attributeGroup ref="entityNameAttrGroup">
            <xs:annotation>
                <xs:documentation xml:lang="en-US">
                    <![CDATA[
                    Name of this Replay topic description. If the <topic_name>
                    tag is not present, this will also be the name of the DDS
                    topic to be replayed.
                    ]]>
                </xs:documentation>
            </xs:annotation>
        </xs:attributeGroup>

    </xs:complexType>

    <xs:complexType name="replayStream">
        <xs:sequence>
            <xs:element name="stream_name"
                        type="xs:string"
                        minOccurs="0"/>

            <xs:element name="registered_type_name"
                        type="xs:string"/>
            <xs:element name="wait_for_stream_match"
                         type="xs:boolean"
                         minOccurs="0"/>
            <xs:element name="property"
                        type="property"
                        minOccurs="0"/>
            <xs:element name="transformation"
                        type="transformation"
                        minOccurs="0" />
        </xs:sequence>

        <xs:attributeGroup ref="entityNameAttrGroup">
            <xs:annotation>
                <xs:documentation xml:lang="en-US">
                    <![CDATA[
                    Name of this Replay Stream description. If the <stream_name>
                    tag is not present, this will also be the name of the Stream
                    to be recorded.
                    ]]>
                </xs:documentation>
            </xs:annotation>
        </xs:attributeGroup>
         <xs:attribute name="connection_ref"
                      type="elementReference"
                      use="required"/>
    </xs:complexType>

    <!-- ================================================================== -->
    <!-- Replay Session Types                                               -->
    <!-- ================================================================== -->
    <xs:complexType name="replaySession">
        <xs:annotation>
            <xs:documentation>
                <![CDATA[
                The session that will be used to replay data.  The session
                is associated with threads that replay the data, a publisher,
                a set of Topics to replay, and a set of DataWriters used to
                replay.
                ]]>
            </xs:documentation>
        </xs:annotation>

        <xs:sequence>
            <xs:element name="publisher_qos"
                        minOccurs="0"
                        type="publisherQosProfileChild" />
            <xs:element name="thread_pool"
                        type="threadPoolSettings"
                        minOccurs="0" />
            <xs:choice minOccurs="0"
                       maxOccurs="unbounded">
                <xs:element name="topic_group"
                            minOccurs="0"
                            maxOccurs="unbounded"
                            type="replayTopicGroup" >
                    <xs:annotation>
                        <xs:documentation>
                            <![CDATA[
                            Group of Topics to replay
                            ]]>
                        </xs:documentation>
                    </xs:annotation>
                </xs:element>
                <xs:element name="topic"
                            minOccurs="0"
                            maxOccurs="unbounded"
                            type="replayTopic" >
                   <xs:annotation>
                        <xs:documentation>
                            <![CDATA[
                            Single Topic to replay
                            ]]>
                        </xs:documentation>
                    </xs:annotation>
                </xs:element>
                <!--
                    Internal use only: currently this capability is not available
                    for users since it's not complete. Future versions may
                    enable it as experimental and or fully supported. If you
                    have questions, contact support@rti.com.
                    <xs:element name="stream"
                                maxOccurs="unbounded"
                                type="replayStream">
                        <xs:annotation>
                            <xs:documentation>
                                <![CDATA[
                                Single Stream to replay (INTERNAL USE ONLY)
                                ]]>
                            </xs:documentation>
                        </xs:annotation>
                    </xs:element>
                -->
            </xs:choice>
        </xs:sequence>

        <xs:attribute name="default_participant_ref"
                      type="elementReference" >
            <xs:annotation>
                <xs:documentation>
                    <![CDATA[
                    The default DomainParticipant (and domain) to use when
                    replaying this data.
                    ]]>
                </xs:documentation>
            </xs:annotation>
        </xs:attribute>
        <xs:attributeGroup ref="entityNameAttrGroup">
            <xs:annotation>
                <xs:documentation xml:lang="en-US">
                    <![CDATA[
                    Participant reference name
                    ]]>
                </xs:documentation>
            </xs:annotation>
        </xs:attributeGroup>
    </xs:complexType>


    <!-- =================================================================== -->
    <!-- Top-level DDS config inside a replay instance                       -->
    <!-- =================================================================== -->

    <xs:complexType name="replaySqliteSettings">
        <xs:all>
            <xs:element name="storage_format"
                        type="sqliteStorageFormatKind"
                        minOccurs="0" >
                <xs:annotation>
                    <xs:documentation>
                        <![CDATA[
                        The storage format of the user data files found in the
                        database directory. If not specified, CDR is assumed.
                        Default: CDR
                        ]]>
                    </xs:documentation>
                </xs:annotation>
            </xs:element>
            <xs:element name="database_dir"
                        type="xs:string"
                        minOccurs="0" >
                <xs:annotation>
                    <xs:documentation>
                        <![CDATA[
                        The directory where to look for a recorded database.
                        The directory must contain a valid metadata file, as
                        well as a discovery file and one or many user data
                        files.
                        This field is optional and when not included, the
                        current directory will be used.
                        Default: the current directory.
                        ]]>
                    </xs:documentation>
                </xs:annotation>
            </xs:element>

            <xs:element name="sql_initialization_string"
                        minOccurs="0"
                        type="xs:string" >
                <xs:annotation>
                    <xs:documentation>
                        <![CDATA[
                        Allows configuring a SQLite SQL expression to use when
                        establishing sqlite connections using this plugin.
                        Default:
                        PRAGMA SYNCHRONOUS = OFF; PRAGMA JOURNAL_MODE = MEMORY;
                        ]]>
                    </xs:documentation>
                </xs:annotation>
            </xs:element>

        </xs:all>
    </xs:complexType>

    <xs:complexType name="domainMapType">
        <xs:attribute name="legacy_domain_name" type="xs:string" use="required">
            <xs:annotation>
                <xs:documentation>
                    <![CDATA[
                    Name of the recorded domain name as specified in the old
                    Recorder domain tag, example:
                    <domain name="domain0">.
                    ]]>
                </xs:documentation>
            </xs:annotation>
        </xs:attribute>
        <xs:attribute name="participant_ref" type="xs:string" use="required">
            <xs:annotation>
                <xs:documentation>
                    <![CDATA[
                    The name of a domain participant specified below using a
                    <domain_participant> tag.
                    ]]>
                </xs:documentation>
            </xs:annotation>
        </xs:attribute>
    </xs:complexType>

    <xs:complexType name="legacyDomainMapping">
        <xs:sequence>
            <xs:element name="domain_map"
                        type="domainMapType"
                        minOccurs="1"
                        maxOccurs="unbounded">
                <xs:annotation>
                    <xs:documentation>
                        <![CDATA[
                        A link between a recorded legacy domain name and a
                        domain participant defined below.
                        ]]>
                    </xs:documentation>
                </xs:annotation>
            </xs:element>
        </xs:sequence>
    </xs:complexType>

    <xs:complexType name="replayLegacySettings">
        <xs:all>
            <xs:element name="file_path"
                        type="xs:string"
                        minOccurs="0" >
                <xs:annotation>
                    <xs:documentation>
                        <![CDATA[
                        Path to the legacy format recorded file. File set and
                        version properties will be obtained automatically from
                        the file itself.
                        ]]>
                    </xs:documentation>
                </xs:annotation>
            </xs:element>
            <xs:element name="domain_mapping"
                        type="legacyDomainMapping"
                        minOccurs="0">
                <xs:annotation>
                    <xs:documentation>
                        <![CDATA[
                        Latest versions of the old Recorder database allowed the
                        usage of field filters. This means that by default, the
                        domain ID field was not recorded (it was filtered out by
                        default). Thus, there is no information available in the
                        database to relate the domain name used to record the
                        data with the domain ID we're supplying in this
                        configuration. This tag allows the user to link legacy
                        domain names with domain participants defined below.
                        ]]>
                    </xs:documentation>
                </xs:annotation>
            </xs:element>
        </xs:all>
    </xs:complexType>

    <xs:complexType name="replayStorageSettings">
        <xs:choice minOccurs="0">
            <xs:element name="legacy"
                        type="replayLegacySettings"/>
            <xs:element name="sqlite"
                        type="replaySqliteSettings"/>
            <xs:element name="plugin"
                        type="storagePlugin"/>
        </xs:choice>
    </xs:complexType>

    <!-- Playback settings -->
    <xs:complexType name="fidelitySettings">
        <xs:sequence>
            <xs:element name="sampling_period"
                        minOccurs="0"
                        type="duration"/>
        </xs:sequence>
    </xs:complexType>

    <xs:complexType name="localTime">
        <xs:annotation>
            <xs:documentation>
                <![CDATA[
                The local time at which Replay should start replaying data. This
                time is defined in hour/minute/second format, and it's scoped
                only within the current date (today). Any hour/minute/second
                combination less or equal than the current time will be
                considered to be in the past and thus Replay will start
                immediately.
                ]]>
            </xs:documentation>
        </xs:annotation>
        <xs:sequence>
            <xs:element name="hour"
                        type="dateTimeHour"/>
            <xs:element name="minute"
                        type="dateTimeMinuteOrSec" />
            <xs:element name="second"
                        type="dateTimeMinuteOrSec" />
        </xs:sequence>
    </xs:complexType>

    <xs:complexType name="breakpointType">
         <xs:simpleContent>
            <xs:extension base="xs:nonNegativeInteger">
                <xs:attribute name="label" type="xs:string"/>
            </xs:extension>
        </xs:simpleContent>
    </xs:complexType>

    <xs:complexType name="breakpointList">
        <xs:sequence>
            <xs:element name="element"
                        minOccurs="0"
                        maxOccurs="unbounded"
                        type="breakpointType">
            </xs:element>
        </xs:sequence>
    </xs:complexType>

    <xs:complexType name="debugModeSettings">
        <xs:annotation>
            <xs:documentation>
                <![CDATA[
                The settings for how this replay service will debug,
                including the slice period or the list of initial breakpoints.
                ]]>
            </xs:documentation>
        </xs:annotation>
        <xs:sequence>
            <xs:element name="enabled"
                        minOccurs="0"
                        type="xs:boolean">
                <xs:annotation>
                    <xs:documentation>
                        <![CDATA[
                        When set to 'true', Replay will start in debug mode
                        Default: false.
                        ]]>
                    </xs:documentation>
                </xs:annotation>
            </xs:element>
            <xs:element name="slice_period"
                        minOccurs="0"
                        type="duration">
                <xs:annotation>
                    <xs:documentation>
                        <![CDATA[
                        The period of time that will represent a slice of the
                        replay on debug mode. When Replay receives a slice remote
                        command operation it will only continue the replay
                        for this period of time.
                        Default: 1 second.
                        ]]>
                    </xs:documentation>
                </xs:annotation>
            </xs:element>
            <xs:element name="initial_breakpoints"
                        minOccurs="0"
                        type="breakpointList">
                <xs:annotation>
                    <xs:documentation>
                        <![CDATA[
                        List of breakpoints to be set at the start of the Service.
                        ]]>
                    </xs:documentation>
                </xs:annotation>
            </xs:element>
        </xs:sequence>
    </xs:complexType>

    <xs:complexType name="InstanceHistoryType">
        <xs:sequence>
            <xs:element name="enabled"
                        minOccurs="0"
                        maxOccurs="1"
                        type="xs:boolean">
                <xs:annotation>
                    <xs:documentation>
                    <![CDATA[
                    Whether to enable or disable the feature. When enabled,
                    Replay will publish an initial value (or more, depending on
                    the depth setting) for every alive instance before the
                    specified start timestamp. After this startup publication,
                    Replay will start normal replay.
                    Default: false.
                    ]]>
                    </xs:documentation>
                </xs:annotation>
            </xs:element>
        </xs:sequence>
    </xs:complexType>

    <xs:complexType name="playbackSettings">
        <xs:annotation>
            <xs:documentation>
                <![CDATA[
                The settings for how this replay service will play back,
                including the replay fidelity (granularity of the sampling
                period) or the local start time.
                ]]>
            </xs:documentation>
        </xs:annotation>

        <xs:sequence>
            <xs:element name="fidelity"
                        minOccurs="0"
                        type="fidelitySettings" />
            <xs:element name="rate"
                        minOccurs="0"
                        type="xs:double" />
            <xs:element name="enable_looping"
                        minOccurs="0"
                        type="xs:boolean">
                <xs:annotation>
                    <xs:documentation>
                        <![CDATA[
                        When set to 'true', Replay will never stop publishing
                        data but will loop continously, starting over at the
                        same start time and finishing at the same end time
                        specified using the 'data_selection' settings.
                        Default: false.
                        ]]>
                    </xs:documentation>
                </xs:annotation>
            </xs:element>
            <xs:element name="debug_mode"
                        minOccurs="0"
                        type="debugModeSettings" />
            <xs:element name="reverse_mode"
                        minOccurs="0"
                        type="xs:boolean" />
            <xs:element name="sample_order"
                        minOccurs="0"
                        type="sampleOrderKind" />
            <xs:element name="start_replay_local_time"
                        minOccurs="0"
                        type="localTime" />
            <xs:element name="instance_history_replay"
                        minOccurs="0"
                        maxOccurs="1"
                        type="InstanceHistoryType">
                <xs:annotation>
                    <xs:documentation>
                        <![CDATA[
                        This setting enables the Instance History Replay
                        feature. When this feature is enabled, Replay will
                        reconstruct the state of the world prior to the start
                        timestamp, for all keyed topics being replayed. Replay
                        will search for and publish the last value (or values,
                        depending on the depth) for any instances alive at that
                        point in time, before starting regular replay of
                        samples.
                        ]]>
                    </xs:documentation>
                </xs:annotation>
            </xs:element>
        </xs:sequence>
    </xs:complexType>

    <!-- =================================================================== -->
    <!-- Replay Service configuration                                        -->
    <!-- =================================================================== -->
    <xs:complexType name="replayService">
        <xs:annotation>
            <xs:documentation>
                <![CDATA[
                This contains the configuration for a Replay Service instance
                ]]>
            </xs:documentation>
        </xs:annotation>
        <xs:complexContent>
            <xs:extension base="abstractService">
                <xs:sequence>
                    <!-- Input config -->
                    <xs:element name="storage"
                                minOccurs="0"
                                type="replayStorageSettings"/>
                    <xs:element name="data_selection"
                                minOccurs="0"
                                type="dataSelection"/>
                    <!-- Runtime config -->
                    <xs:element name="playback"
                                minOccurs="0"
                                type="playbackSettings"/>
                    <!-- Output config -->
                    <xs:element name="domain_participant"
                                minOccurs="0"
                                maxOccurs="unbounded"
                                type="userParticipant"/>
<!--                    <xs:element name="connection"
                                minOccurs="0"
                                maxOccurs="unbounded"
                                type="userConnection">
                        <xs:annotation>
                            <xs:documentation>
                                <![CDATA[
                                For internal use only.
                                 ]]>
                            </xs:documentation>
                        </xs:annotation>
                    </xs:element>-->
                    <!-- Session -->
                    <xs:element name="session"
                                minOccurs="0"
                                maxOccurs="unbounded"
                                type="replaySession"/>
                </xs:sequence>
            </xs:extension>
        </xs:complexContent>
    </xs:complexType>

    <!-- =================================================================== -->
    <!-- Root Element                                                        -->
    <!-- =================================================================== -->
    <xs:element name="dds">
        <xs:annotation>
            <xs:documentation>
                <![CDATA[
                Configuration of RTI Connext and RTI Replay Service.
                ]]>
            </xs:documentation>
        </xs:annotation>
        <xs:complexType>
            <xs:choice minOccurs="0" maxOccurs="unbounded">
                <!-- User Env -->
                <xs:element name="configuration_variables"
                            type="KeyValuePairSeq">
                    <xs:annotation>
                        <xs:documentation>
                            <![CDATA[
                            Defines a set of default values for user variables.
                            The values specified in this section can be overridden
                            by command-line arguments, Library API, or
                            environment variables.
                            ]]>
                        </xs:documentation>
                    </xs:annotation>
                </xs:element>
                <!-- Type definitions -->
                <xs:element name="types">
                    <xs:annotation>
                        <xs:documentation>
                            <![CDATA[
                            Defines types that can be used by
                            RTI Replay Service
                            ]]>
                        </xs:documentation>
                    </xs:annotation>
                    <xs:complexType>
                        <xs:group ref="moduleElements"/>
                    </xs:complexType>
                </xs:element>

                <!-- QoS definitions -->
                <xs:element name="qos_library"
                                type="qosLibrary">
                    <xs:annotation>
                        <xs:documentation>
                            <![CDATA[
                            Specifies a QoS library and profiles. The
                            contents of this tag are specified in the same
                            manner as for an RTI Connext QoS profile file
                            ]]>
                        </xs:documentation>
                    </xs:annotation>
                </xs:element>

                <!-- Transformation and Storage plugins -->
                <xs:element name="plugin_library"
                                type="recorderPluginLibrary">
                    <xs:annotation>
                        <xs:documentation>
                            <![CDATA[
                            Specifies a library of transformation and
                            storage plugins.
                            ]]>
                        </xs:documentation>
                    </xs:annotation>
                </xs:element>

                <xs:element name="replay_service"
                                type="replayService">
                    <xs:annotation>
                        <xs:documentation>
                            <![CDATA[
                            Specifies a named Replay Service instance
                            ]]>
                        </xs:documentation>
                    </xs:annotation>
                </xs:element>

            </xs:choice>
        </xs:complexType>
    </xs:element>

</xs:schema>
