All Downloads are FREE. Search and download functionalities are using the official Maven repository.

xml.area002-v001-COM.xml Maven / Gradle / Ivy

The newest version!
<?xml version="1.0" encoding="UTF-8"?>
<mal:specification xmlns:com="http://www.ccsds.org/schema/COMSchema"
                   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                   xmlns:mal="http://www.ccsds.org/schema/ServiceSchema">
  <mal:area name="COM" number="2" version="1"
            comment="This section details the Common Object Model area; the structures used by the service are detailed in section 4. The area and structures are defined in terms of the MO Message Abstraction Layer (MAL), so it is possible to deploy them over any supported protocol and message transport.">
    <mal:documentation name="Requirements" order="1">The instance identifier of an object must not use the value of '0' for actual object instances as this is the wildcard value.
The related field of an object must not use the value of '0' as this is the wildcard value.
The instance identifier of the source field of an object must not use the value of '0' as this is the wildcard value.
If the MAL data type specification is being used the body of an object shall be a concrete type.
If the MAL data type specification is being used the body of an object shall not be an abstract Attribute.
If the MAL data type specification is being used the body of an object shall not be a list.
</mal:documentation>
    <mal:service xsi:type="com:ExtendedServiceType" name="Event" number="1"
                 comment="An event is a specific object representing 'something that happens in the system at a given point in time'. The event service provides a generic mechanism for the distribution of events.&#xA;An event is a special type of COM object and is identified by the normal object fields (domain, object type, and object instance identifier). &#xA;It may also contain:&#xA;&lt;ul&gt;&#xA; &lt;li&gt;a link to a source object (that caused the event to be generated)&lt;/li&gt;&#xA; &lt;li&gt;a link to a service specific related object&lt;/li&gt;&#xA; &lt;li&gt;a body that is specific to the event type and whose data structure is defined by the service that declares the event.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;The event service only defines a single operation that supports the publishing of events and subscription of events generated by other components.&#xA;Events are published with a MAL update type of DELETION. Events are something that happens at a given point in time, therefore they in themselves have no lifetime, they are created and deleted at the time instant in time. For efficiency purposes only the deletion update is used.">
      <mal:capabilitySet number="1">
        <mal:pubsubIP name="monitorEvent" number="1" supportInReplay="true"
                      comment="The monitorEvent operation allows a consumer to subscribe for events.">
          <mal:messages>
            <mal:publishNotify>
              <mal:field name="eventLinks"
                         comment="The MAL::EntityKey.firstSubKey shall contain the event object number as a base 10 string. For example, for an object number of '14' the key value would be '14' with no padding.&#xA;The MAL::EntityKey.secondSubKey shall contain the area, service, and version ObjectType fields as a MAL::Long populated as (in hex) 0xAAAASSSSVVXXXXXX where AAAA is the area (16 bits), SSSS is the service (16 bits), VV is the version (8 bits), and XXXXXX is unused and set to zero (24 bits). For example, for an area of '1', and a service of '2', and a version of '3' the field would contain (in hex) 0x0001000203000000.&#xA;The MAL::EntityKey.thirdSubKey shall contain the event object instance identifier.&#xA;The MAL::EntityKey.fourthSubKey shall contain the area, service, version and number fields of the event source ObjectType using same methodology as given for the second sub key but replacing the XXXXXX part with the number field.&#xA;The related and source links of the event shall populate the ObjectDetails part of the publish/notify message.&#xA;The body of the event shall populate the final part of the publish/notify message.&#xA;The timestamp of the Event shall be taken from the publish message.&#xA;An event in one domain may be generated by something in another domain therefore the domain of the event shall not be required to be the same domain as the source of the event.">
                <mal:type name="ObjectDetails" area="COM"/>
              </mal:field>
              <mal:field name="eventBody">
                <mal:type name="Element" area="MAL"/>
              </mal:field>
            </mal:publishNotify>
          </mal:messages>
        </mal:pubsubIP>
      </mal:capabilitySet>
      <com:features>
        <com:objects comment="The event service may be used for the publishing and monitoring of COM events.&#xA;The identification of the event shall follow the COM object rules.&#xA;The COM object source link shall point to the object that caused the event to be generated unless stated otherwise by the defining service specification.&#xA;The COM object related link shall be service and event type specific.&#xA;When an event is published using the PUBLISH-SUBSCRIBE monitorEvent operation defined in the event service it shall be published with a MAL update type of DELETED.&#xA;When an event is published, the COM object instance identifier shall be populated by the publisher.&#xA;The object instance identifier should be unique for a domain and object type.&#xA;An event may have an associated body that is published with it.&#xA;The type and contents of the body of an event shall be specified in the defining service specification but must be a concrete type or an Attribute."/>
        <com:archiveUsage comment="Each type of event is a separate COM object type and therefore may be stored in a COM archive.&#xA;When a service implementation requires that the events it generates be persisted, upon event emission, the event shall be stored as normal.&#xA;The related link is service specific and shall always be null if not explicitly used by a service.&#xA;The source link shall point to the source object of the event."/>
      </com:features>
    </mal:service>
    <mal:service xsi:type="com:ExtendedServiceType" name="Archive" number="2"
                 comment="The Archive service provides a basic interface to a standard archiving function. It follows the basic CRUD principles and allows simple querying of the archive. It provides operations to add new objects to an archive, delete objects from an archive, update existing objects in an archive, and also query the content of the archive.&#xA;The query operation provides a basic querying ability, allowing a consumer to filter on fields from the object headers (such as domain etc) and also filter on the body of the object if it uses the MAL data type specification.&#xA;The query operation is extensible but the extensions would be outside this standard.&#xA;Finally, a consumer of the archive can monitor it for changes by subscribing for archive events from the event service. Any change to the archive is published using the event service if it is supported by an implementation.">
      <mal:capabilitySet number="1">
        <mal:invokeIP name="retrieve" number="1" supportInReplay="true"
                      comment="Retrieves a set of objects identified by their object instance identifier.">
          <mal:messages>
            <mal:invoke>
              <mal:field name="objType"
                         comment="The first part of the request shall contain the type of the object required.&#xA;If any of the fields of the object type contains the wildcard value of '0' then an INVALID error shall be returned.&#xA;The second part of the request shall contain the domain to match.&#xA;If the domain contains the wildcard value of '*' then an INVALID error shall be returned.&#xA;The third part of the request shall contain the list of object instance identifiers to match.&#xA;If the object instance identifier list contains the wildcard value '0' then all object instances shall be matched.&#xA;If any explicitly requested object cannot be matched then an UNKNOWN error shall be returned.">
                <mal:type name="ObjectType" area="COM"/>
              </mal:field>
              <mal:field name="domain">
                <mal:type list="true" name="Identifier" area="MAL"/>
              </mal:field>
              <mal:field name="objInstIds">
                <mal:type list="true" name="Long" area="MAL"/>
              </mal:field>
            </mal:invoke>
            <mal:acknowledgement/>
            <mal:response>
              <mal:field name="objDetails"
                         comment="The response shall contain the set of matched objects.&#xA;The first returned list shall contain the matched object instance identifiers and object details of the matched objects.&#xA;The second returned list shall contain the object bodies ordered identically to the first list unless no body for the object is declared in the service specification, in which case a NULL replaces the complete list.&#xA;There shall be an entry in each returned list for each matched object.&#xA;When no objects have been matched only a response with NULL for each part of the response shall be returned.&#xA;The ordering of the returned objects is not specified and implementation specific.&#xA;If ordering of the returned objects is required then the query operation should be used instead.">
                <mal:type list="true" name="ArchiveDetails" service="Archive" area="COM"/>
              </mal:field>
              <mal:field name="objBodies">
                <mal:type list="true" name="Element" area="MAL"/>
              </mal:field>
            </mal:response>
          </mal:messages>
          <mal:errors>
            <mal:errorRef comment="The request contains a wildcard value in either the object type field or the domain.">
              <mal:type name="INVALID" area="COM"/>
            </mal:errorRef>
            <mal:errorRef comment="One or more of the requested objects specified in the operation do not exist and therefore cannot be found.">
              <mal:type name="UNKNOWN" area="MAL"/>
              <mal:extraInformation comment="A list of the indexes of the error values shall be contained in the extra information field.">
                <mal:type list="true" name="UInteger" area="MAL"/>
              </mal:extraInformation>
            </mal:errorRef>
          </mal:errors>
        </mal:invokeIP>
        <mal:progressIP name="query" number="2" supportInReplay="true"
                        comment="Retrieves a set of object instance identifiers, and optionally the object bodies, from a list of supplied queries. The PROGRESS interaction pattern is used as the returned set of data may be quite large and this allows it to be split over several MAL messages.">
          <mal:messages>
            <mal:progress>
              <mal:field name="returnBody"
                         comment="The first part of the request shall contain a Boolean that if set to TRUE requests that the body of the objects is returned otherwise only the ObjectType and ArchiveDetails shall be returned and the returned list of the bodies of the objects shall be replaced with a NULL.&#xA;The second part of the request shall contain the type of the object required.&#xA;Each part of the object type may contain the wildcard value of '0'.&#xA;The third and fourth parts of the request shall contain the queries to evaluate.&#xA;A single query shall be formed by the combination of an ArchiveQuery from the first list and a QueryFilter from the second list.&#xA;The two lists shall be ordered identically so that the query and the filter parts can be matched together.&#xA;If a query does not contain a QueryFilter part then that entry in the QueryFilter list shall be replaced with a NULL value.&#xA;If the request does not contain any QueryFilters then the complete list may be replaced with a NULL.&#xA;The size of the two lists must be the same unless the complete second list is replaced with a NULL otherwise an INVALID error shall be raised.&#xA;For each query, the ArchiveQuery and the QueryFilter shall contain the COM object fields to filter on.&#xA;The ArchiveQuery may contain the wildcard value of NULL on each of the fields.&#xA;If an ArchiveQuery contains an end time but no start time then it shall match the single object that has a timestamp closest to, but not greater than, the end time field.&#xA;The end time field may specify a time in the future.&#xA;If the sortFieldName of the ArchiveQuery does not reference a defined field then an INVALID error shall be returned.&#xA;Each query shall be evaluated separately from each other, the filter of one query will not affect the filter of another. This forms a logical OR operation.&#xA;If the QueryFilter contains an error then an INVALID error shall be returned. The definition of erroneous values are filter specific and defined in the relevant filter structure specification.">
                <mal:type name="Boolean" area="MAL"/>
              </mal:field>
              <mal:field name="objType">
                <mal:type name="ObjectType" area="COM"/>
              </mal:field>
              <mal:field name="archiveQuery">
                <mal:type list="true" name="ArchiveQuery" service="Archive" area="COM"/>
              </mal:field>
              <mal:field name="queryFilter">
                <mal:type list="true" name="QueryFilter" service="Archive" area="COM"/>
              </mal:field>
            </mal:progress>
            <mal:acknowledgement/>
            <mal:update>
              <mal:field name="objType">
                <mal:type name="ObjectType" area="COM"/>
              </mal:field>
              <mal:field name="domain">
                <mal:type list="true" name="Identifier" area="MAL"/>
              </mal:field>
              <mal:field name="objDetails">
                <mal:type list="true" name="ArchiveDetails" service="Archive" area="COM"/>
              </mal:field>
              <mal:field name="objBodies">
                <mal:type list="true" name="Element" area="MAL"/>
              </mal:field>
            </mal:update>
            <mal:response>
              <mal:field name="objType"
                         comment="The updates and the responses shall contain the set of matched objects.&#xA;If a wildcard was used in the ObjectType part of the request then the updates and response shall contain the ObjectType of each matched object.&#xA;If there was not any wildcards in the ObjectType part of the request the ObjectType in the updates and response shall be replaced by a NULL.&#xA;The first returned list shall contain the domain of the objects being returned.&#xA;If multiple ObjectTypes or domains have been matched then multiple Update message may be returned.&#xA;There shall be an entry in the second and third lists for each matched object.&#xA;The second returned list shall contain the archive details stored for the matched objects.&#xA;If the initial Boolean of the request was True the third returned list shall contain the bodies of the objects.&#xA;If the initial Boolean of the request was NULL or False the third returned list shall be replaced by a NULL.&#xA;The returned lists shall be sorted based on the sorting options specified in ArchiveQuery.&#xA;Each domain/object type pair shall be sorted separately from other domain/object type pairs, there is no requirement for sorting to be applied across domain/object type pairs.&#xA;When the field being sorted on contains a NULL value, or does not exist in the matched object (due to a containing composite being NULL), these entries shall be added to the end of the returned list in the order that they are matched.&#xA;When no objects have been matched only a response with NULL for each part of the response shall be returned.">
                <mal:type name="ObjectType" area="COM"/>
              </mal:field>
              <mal:field name="domain">
                <mal:type list="true" name="Identifier" area="MAL"/>
              </mal:field>
              <mal:field name="objDetails">
                <mal:type list="true" name="ArchiveDetails" service="Archive" area="COM"/>
              </mal:field>
              <mal:field name="objBodies">
                <mal:type list="true" name="Element" area="MAL"/>
              </mal:field>
            </mal:response>
          </mal:messages>
          <mal:errors>
            <mal:errorRef comment="One or more of the query filters supplied contains an invalid value.">
              <mal:type name="INVALID" area="COM"/>
              <mal:extraInformation comment="The extra information field contains a list of the indexes of the erroneous values from the originating list supplied.">
                <mal:type list="true" name="UInteger" area="MAL"/>
              </mal:extraInformation>
            </mal:errorRef>
          </mal:errors>
        </mal:progressIP>
        <mal:invokeIP name="count" number="3" supportInReplay="true"
                      comment="Counts the set of objects based on a supplied query.">
          <mal:messages>
            <mal:invoke>
              <mal:field name="objType"
                         comment="The ObjectType, ArchiveQuery and QueryFilter parts of the request shall be populated exactly the same as for the query operation.">
                <mal:type name="ObjectType" area="COM"/>
              </mal:field>
              <mal:field name="archiveQuery">
                <mal:type list="true" name="ArchiveQuery" service="Archive" area="COM"/>
              </mal:field>
              <mal:field name="queryFilter">
                <mal:type list="true" name="QueryFilter" service="Archive" area="COM"/>
              </mal:field>
            </mal:invoke>
            <mal:acknowledgement/>
            <mal:response>
              <mal:field name="counts"
                         comment="The response shall contain the count of matched objects.&#xA;There shall be an entry in each returned list for each entry in the request list.&#xA;The returned lists shall be ordered the same as the request query lists so that the response can be matched to the corresponding request.">
                <mal:type list="true" name="Long" area="MAL"/>
              </mal:field>
            </mal:response>
          </mal:messages>
          <mal:errors>
            <mal:errorRef comment="One or more of the query filters supplied contains an invalid value.">
              <mal:type name="INVALID" area="COM"/>
              <mal:extraInformation comment="The extra information field contains a list of the indexes of the erroneous values from the originating list supplied.">
                <mal:type list="true" name="UInteger" area="MAL"/>
              </mal:extraInformation>
            </mal:errorRef>
          </mal:errors>
        </mal:invokeIP>
      </mal:capabilitySet>
      <mal:capabilitySet number="2">
        <mal:requestIP name="store" number="4" supportInReplay="false"
                       comment="Stores new objects in the archive and causes an ObjectStored event to be published by the archive.&#xA;When new objects are being stored in an archive by a service provider the archive service provider is capable of allocating an unused object instance identifier for the objects being stored. The returned object instance identifier should be used by the service provider for identifying the object instances to its consumer to ensure that only a single object instance identifier is used for each object instance.">
          <mal:messages>
            <mal:request>
              <mal:field name="returnObjInstIds"
                         comment="The first part of the request indicates whether the operation should return the object instance identifiers used, if TRUE it shall return them, otherwise it returns NULL.&#xA;The second part of the request shall contain the type of object being stored.&#xA;The third part of the request shall contain the domain of the objects being stored.&#xA;The fourth part of the request shall contain the list of archive details to use, one for each object being stored.&#xA;If the object instance identifier supplied in the archive details is set to 0 then the store operation shall allocate a new and unused object instance identifier.&#xA;If the object instance identifier supplied in the archive details is not set to 0 and is currently used in the archive then a DUPLICATE error is returned and no objects from the request shall be stored.&#xA;The fifth part of the request shall contain the list of objects to store.&#xA;The fourth and fifth list must be the same size as there is only one entry in each for each object to be stored. If they differ in size an INVALID error is returned with the extra error information integer giving the index of the list entry without a matching entry in the other list.&#xA;An INVALID error shall be returned if a wildcard value of '0' is used in the object type.&#xA;An INVALID error shall be returned if a wildcard value of '*' is used in the domain identifier list.&#xA;An INVALID error shall be returned if the values of '0', '*', or NULL are used in the network, timestamp or provider fields of the archive details except for the object instance identifier.&#xA;The type of the body of the object should be checked against the declared type in the relevant service specification, if different an INVALID error is raised.&#xA;If any error is returned then the store operation shall be rolled back and nothing is stored as a result of the operation.">
                <mal:type name="Boolean" area="MAL"/>
              </mal:field>
              <mal:field name="objType">
                <mal:type name="ObjectType" area="COM"/>
              </mal:field>
              <mal:field name="domain">
                <mal:type list="true" name="Identifier" area="MAL"/>
              </mal:field>
              <mal:field name="objDetails">
                <mal:type list="true" name="ArchiveDetails" service="Archive" area="COM"/>
              </mal:field>
              <mal:field name="objBodies">
                <mal:type list="true" name="Element" area="MAL"/>
              </mal:field>
            </mal:request>
            <mal:response>
              <mal:field name="objInstIds"
                         comment="The response shall contain the set of new object instance identifiers if the request supplied an initial TRUE Boolean value, otherwise it returns NULL.&#xA;The returned list shall be ordered identically to the submitted list so that the returned object instance identifiers can be mapped to the correct objects.">
                <mal:type list="true" name="Long" area="MAL"/>
              </mal:field>
            </mal:response>
          </mal:messages>
          <mal:errors>
            <mal:errorRef comment="One or more of the objects being stored has supplied an object instance identifier that is already in use in the archive.">
              <mal:type name="DUPLICATE" area="COM"/>
              <mal:extraInformation comment="The extra information field contains a list of the indexes of the erroneous values from the originating request list.">
                <mal:type list="true" name="UInteger" area="MAL"/>
              </mal:extraInformation>
            </mal:errorRef>
            <mal:errorRef comment="One or more of the objects being stored contains an invalid value.">
              <mal:type name="INVALID" area="COM"/>
              <mal:extraInformation comment="The extra information field contains a list of the indexes of the erroneous values from the originating list supplied.">
                <mal:type list="true" name="UInteger" area="MAL"/>
              </mal:extraInformation>
            </mal:errorRef>
          </mal:errors>
        </mal:requestIP>
      </mal:capabilitySet>
      <mal:capabilitySet number="3">
        <mal:submitIP name="update" number="5" supportInReplay="false"
                      comment="Updates an object (or set of objects), causes an ObjectUpdated event to be published by the archive.">
          <mal:messages>
            <mal:submit>
              <mal:field name="objType"
                         comment="The first part of the request shall contain the type of object being updated.&#xA;The second part of the request shall contain the domain of the objects being updated.&#xA;The third part of the request shall contain the list of ArchiveDetails.&#xA;The object instance identifier contained in the ArchiveDetails, combined with the object type and domain from the request, shall be used to match objects.&#xA;If requested object cannot be matched then an UNKNOWN error shall be returned and nothing will be updated.&#xA;The remainder of the ArchiveDetails shall be used to update the matched objects.&#xA;The fourth part of the request shall contain the list of objects to replace the matched objects with.&#xA;No wildcard values shall be accepted in the object type, the domain, and the object instance identifier, an INVALID error is returned in this case and no objects are updated.">
                <mal:type name="ObjectType" area="COM"/>
              </mal:field>
              <mal:field name="domain">
                <mal:type list="true" name="Identifier" area="MAL"/>
              </mal:field>
              <mal:field name="objDetails">
                <mal:type list="true" name="ArchiveDetails" service="Archive" area="COM"/>
              </mal:field>
              <mal:field name="objBodies">
                <mal:type list="true" name="Element" area="MAL"/>
              </mal:field>
            </mal:submit>
          </mal:messages>
          <mal:errors>
            <mal:errorRef comment="One or more of the requested objects specified in the operation do not exist and therefore cannot be found.">
              <mal:type name="UNKNOWN" area="MAL"/>
              <mal:extraInformation comment="A list of the indexes of the error values shall be contained in the extra information field.">
                <mal:type list="true" name="UInteger" area="MAL"/>
              </mal:extraInformation>
            </mal:errorRef>
            <mal:errorRef comment="One or more of the objects being updated contains a wildcard value in the object identifier fields.">
              <mal:type name="INVALID" area="COM"/>
              <mal:extraInformation comment="The extra information field contains a list of the indexes of the erroneous values from the originating list supplied.">
                <mal:type list="true" name="UInteger" area="MAL"/>
              </mal:extraInformation>
            </mal:errorRef>
          </mal:errors>
        </mal:submitIP>
      </mal:capabilitySet>
      <mal:capabilitySet number="4">
        <mal:requestIP name="delete" number="6" supportInReplay="false"
                       comment="Deletes an object (or set of objects) and causes an ObjectDeleted event to be published by the archive.">
          <mal:messages>
            <mal:request>
              <mal:field name="objType"
                         comment="The first part of the request shall contain the type of object to match and is not permitted to contain the wildcard value.&#xA;The second part of the request shall contain the domain of the objects to match and is not permitted to contain the wildcard value.&#xA;If either the first or second part contain a wildcard value then an INVALID error shall be returned and no object deleted.&#xA;The third part of the request shall contain the list of object instance identifiers to match.&#xA;If the object instance identifier list contains the wildcard value '0' then all object instances shall be matched.&#xA;If any explicitly requested object cannot be matched then an UNKNOWN error shall be returned and nothing will be deleted.&#xA;The matched objects shall be deleted from the archive.">
                <mal:type name="ObjectType" area="COM"/>
              </mal:field>
              <mal:field name="domain">
                <mal:type list="true" name="Identifier" area="MAL"/>
              </mal:field>
              <mal:field name="objInstIds">
                <mal:type list="true" name="Long" area="MAL"/>
              </mal:field>
            </mal:request>
            <mal:response>
              <mal:field name="deletedObjInstIds"
                         comment="The response shall contain the set of object instance identifiers of the deleted objects.">
                <mal:type list="true" name="Long" area="MAL"/>
              </mal:field>
            </mal:response>
          </mal:messages>
          <mal:errors>
            <mal:errorRef comment="One or more of the requested objects specified in the operation do not exist and therefore cannot be found.">
              <mal:type name="UNKNOWN" area="MAL"/>
              <mal:extraInformation comment="A list of the indexes of the error values shall be contained in the extra information field.">
                <mal:type list="true" name="UInteger" area="MAL"/>
              </mal:extraInformation>
            </mal:errorRef>
            <mal:errorRef comment="The supplied object type or domain contains a wildcard value.">
              <mal:type name="INVALID" area="COM"/>
            </mal:errorRef>
          </mal:errors>
        </mal:requestIP>
      </mal:capabilitySet>
      <mal:dataTypes>
        <mal:enumeration name="ExpressionOperator" shortFormPart="5"
                         comment="The ExpressionOperator enumeration holds a set of possible expression operators.">
          <mal:item value="EQUAL" nvalue="1" comment="Checks for equality."/>
          <mal:item value="DIFFER" nvalue="2" comment="Checks for difference (not equal)."/>
          <mal:item value="GREATER" nvalue="3" comment="Checks for greater than."/>
          <mal:item value="GREATER_OR_EQUAL" nvalue="4"
                    comment="Checks for greater than or equal to."/>
          <mal:item value="LESS" nvalue="5" comment="Checks for less than."/>
          <mal:item value="LESS_OR_EQUAL" nvalue="6" comment="Checks for less than or equal to."/>
          <mal:item value="CONTAINS" nvalue="7"
                    comment="Case sensitive containment test (String types only)"/>
          <mal:item value="ICONTAINS" nvalue="8"
                    comment="Case insensitive containment test (String types only)."/>
        </mal:enumeration>
        <mal:composite name="QueryFilter" comment="The base structure for archive filters.">
          <mal:extends>
            <mal:type name="Composite" area="MAL"/>
          </mal:extends>
        </mal:composite>
        <mal:composite name="ArchiveDetails" shortFormPart="1"
                       comment="The ArchiveDetails structure is used to hold information about a single entry in an Archive.">
          <mal:extends>
            <mal:type name="Composite" area="MAL"/>
          </mal:extends>
          <mal:field name="instId" canBeNull="false"
                     comment="The object instance identifier of the archived object.">
            <mal:type name="Long" area="MAL"/>
          </mal:field>
          <mal:field name="details" canBeNull="false" comment="The details of the Object.">
            <mal:type name="ObjectDetails" area="COM"/>
          </mal:field>
          <mal:field name="network" comment="The network zone of the object.">
            <mal:type name="Identifier" area="MAL"/>
          </mal:field>
          <mal:field name="timestamp" comment="The time the object was created.">
            <mal:type name="FineTime" area="MAL"/>
          </mal:field>
          <mal:field name="provider"
                     comment="The component that created the object (a component may be anything from an onboard equipment to a software process on the ground).">
            <mal:type name="URI" area="MAL"/>
          </mal:field>
        </mal:composite>
        <mal:composite name="ArchiveQuery" shortFormPart="2"
                       comment="The ArchiveQuery structure is used to specify filters on the common parts of an object in an archive.">
          <mal:extends>
            <mal:type name="Composite" area="MAL"/>
          </mal:extends>
          <mal:field name="domain"
                     comment="Only the objects whose domain matches the provided domain will be returned. The domain field supports the wildcard value of '*' only in the last part of the domain. If NULL then all domains shall be matched.">
            <mal:type list="true" name="Identifier" area="MAL"/>
          </mal:field>
          <mal:field name="network"
                     comment="Optional network zone. Only the objects whose network zone matches the provided value will be returned. If NULL then all values will be matched.">
            <mal:type name="Identifier" area="MAL"/>
          </mal:field>
          <mal:field name="provider"
                     comment="Optional provider. Only the objects whose provider URI matches the provided provider URI will be returned. If NULL then all values will be matched.">
            <mal:type name="URI" area="MAL"/>
          </mal:field>
          <mal:field name="related" canBeNull="false"
                     comment="Object instance identifier of the related Object. Only the objects whose related Object matches the provided related Object will be returned unless the '0' wildcard value is supplied.">
            <mal:type name="Long" area="MAL"/>
          </mal:field>
          <mal:field name="source"
                     comment="Optional source. Only the objects whose source matches the provided source will be returned. The fields of the ObjectId may contain the wildcard values ('0' for numeric fields, '*' for Identifier fields). If NULL then all values will be matched. ">
            <mal:type name="ObjectId" area="COM"/>
          </mal:field>
          <mal:field name="startTime"
                     comment="Optional start time. Only the objects whose timestamp is equal or greater than the provided start time will be returned. If NULL then no start time shall be applied.">
            <mal:type name="FineTime" area="MAL"/>
          </mal:field>
          <mal:field name="endTime"
                     comment="Optional end time. Only the objects whose timestamp is equal or less than the provided end time will be returned. If NULL then no end time will be applied.">
            <mal:type name="FineTime" area="MAL"/>
          </mal:field>
          <mal:field name="sortOrder"
                     comment="If set to TRUE then returned values shall be sorted in ascending order, if FALSE then in descending order. If NULL then no sorting shall be applied.">
            <mal:type name="Boolean" area="MAL"/>
          </mal:field>
          <mal:field name="sortFieldName"
                     comment="If the returned values are to be sorted because the sortOrder field is not NULL then this field may contain the name of the field in the object body (MAL::Composite) to sort against. If the object body is not a composite but an Attribute or Enumeration then to sort on the values an empty string of &#34;&#34; should be used. Enumerations are sorted on their ordinal. If this field is NULL then the objects shall be sorted on the COM object timestamp. The field follows the naming convention of CompositeFilter::fieldName. If the field points to a composite, list, abstract type (including Attribute) or Blob then no sorting shall be applied.">
            <mal:type name="String" area="MAL"/>
          </mal:field>
        </mal:composite>
        <mal:composite name="CompositeFilter" shortFormPart="3"
                       comment="The CompositeFilter allows an archive query to specify a filter based on the content of the body of an object if that body is specified using the MAL data type specification.">
          <mal:field name="fieldName" canBeNull="false"
                     comment="The name of the field in the object body (MAL::Composite) to match against. It is specified by referring to the name of the field. If the field does not exist in the Composite then the filter shall evaluate to false. If the field is nested inside another Composite, it can be referenced by separating the field names by a '.' character; for example the field 'instId' or the source of an ArchiveDetails composite would be referenced using &#34;details.source.key.instId&#34;. If the body is not a Composite but an Attribute or Enumeration then it can be referred to by using a blank (&#34;&#34;) string value here. Accessing values from lists is not supported by this method.">
            <mal:type name="String" area="MAL"/>
          </mal:field>
          <mal:field name="type" canBeNull="false" comment="The type of the filter to apply.">
            <mal:type name="ExpressionOperator" service="Archive" area="COM"/>
          </mal:field>
          <mal:field name="fieldValue"
                     comment="The value to compare with. The type of the suppied value and the matched field mst be the same. Must not contain NULL for expression operators CONTAINS, ICONTAINS, GREATER, GREATER_OR_EQUAL, LESS, or LESS_OR_EQUAL otherwise an INVALID error should be returned. Must contain a UInteger ordinal value if the field being matched is an Enumeration. Blob fields can only be used with EQUAL/DIFFER. Must contain a String value if operator is CONTAINS or ICONTAINS otherwise an INVALID error should be returned.">
            <mal:type name="Attribute" area="MAL"/>
          </mal:field>
        </mal:composite>
        <mal:composite name="CompositeFilterSet" shortFormPart="4"
                       comment="Contains a list of CompositeFilters that are AND'd together to form a more complex filter.">
          <mal:extends>
            <mal:type name="QueryFilter" service="Archive" area="COM"/>
          </mal:extends>
          <mal:field name="filters" canBeNull="false" comment="The list of filters to apply.">
            <mal:type list="true" name="CompositeFilter" service="Archive" area="COM"/>
          </mal:field>
        </mal:composite>
      </mal:dataTypes>
      <com:features>
        <com:events comment="For each stored object, an 'ObjectStored' event may be published to the event service.&#xA;For each updated object, an 'ObjectUpdated' event may be published to the event service.&#xA;For each deleted object, an 'ObjectDeleted' event may be published to the event service.&#xA;The source link of the generated events shall link to the object being stored/updated/deleted.&#xA;Archive service events shall be persisted silently in order not to trigger an infinite event loop.">
          <com:event name="ObjectStored" number="1"
                     comment="For each stored object, an event of type 'ObjectStored' may be published to the event service.">
            <com:sourceObject comment="The Object source is the newly stored object."/>
          </com:event>
          <com:event name="ObjectUpdated" number="2"
                     comment="For each updated object, an event of type 'ObjectUpdated' may be published to the event service.">
            <com:sourceObject comment="The Object source is the updated object."/>
          </com:event>
          <com:event name="ObjectDeleted" number="3"
                     comment="For each deleted object, an event of type 'ObjectDeleted' may be published to the event service.">
            <com:sourceObject comment="The Object source is the deleted object."/>
          </com:event>
        </com:events>
      </com:features>
    </mal:service>
    <mal:service xsi:type="com:ExtendedServiceType" name="ActivityTracking" number="3"
                 comment="The activity tracking service provides the ability to monitor the progress of activities; an activity is anything that has a measurable period of time (a command, a remote procedure, a schedule etc). It defines an event pattern that supports the monitoring of activities from the initial consumer request, tracking its progress across a transport link, to reception by the provider and execution in that provider.">
      <mal:dataTypes>
        <mal:composite name="ActivityTransfer" shortFormPart="1"
                       comment="The structure holds details for a Release, Reception, or Forward event of an activity.">
          <mal:field name="success" canBeNull="false"
                     comment="The success result of this stage, TRUE if successful, FALSE otherwise. If this is TRUE then the next two fields should be populated.">
            <mal:type name="Boolean" area="MAL"/>
          </mal:field>
          <mal:field name="estimateDuration"
                     comment="The estimated amount of time it will take to be received by the next destination if Release or Forward. Contains the estimated amount of time it will take to be forwarded by this relay if Reception event. May be NULL if unknown or cannot be calculated.">
            <mal:type name="Duration" area="MAL"/>
          </mal:field>
          <mal:field name="nextDestination"
                     comment="This contains the URI of the next destination, either another relay or the provider. It is protocol specific how this value is derived.">
            <mal:type name="URI" area="MAL"/>
          </mal:field>
        </mal:composite>
        <mal:composite name="ActivityAcceptance" shortFormPart="2"
                       comment="The structure is used to hold details of an Acceptance event.">
          <mal:field name="success" canBeNull="false"
                     comment="The success result of this stage, TRUE if successful, FALSE otherwise.">
            <mal:type name="Boolean" area="MAL"/>
          </mal:field>
        </mal:composite>
        <mal:composite name="ActivityExecution" shortFormPart="3"
                       comment="The structure is used to report the execution status of an activity in the final destination.">
          <mal:field name="success" canBeNull="false"
                     comment="The success result of this stage, TRUE if successful, FALSE otherwise.">
            <mal:type name="Boolean" area="MAL"/>
          </mal:field>
          <mal:field name="executionStage" canBeNull="false"
                     comment="The execution stage of the operation.">
            <mal:type name="UInteger" area="MAL"/>
          </mal:field>
          <mal:field name="stageCount" canBeNull="false"
                     comment="The total number of execution stages that will be reported.">
            <mal:type name="UInteger" area="MAL"/>
          </mal:field>
        </mal:composite>
        <mal:composite name="OperationActivity" shortFormPart="4"
                       comment="The OperationActivity structure contains the details of a MAL operation activity.">
          <mal:field name="interactionType" canBeNull="false"
                     comment="The interaction type of the original operation message header.">
            <mal:type name="InteractionType" area="MAL"/>
          </mal:field>
        </mal:composite>
      </mal:dataTypes>
      <com:features>
        <com:objects comment="The activity tracking service may be used for the monitoring of MAL operations.&#xA;A MAL implementation must populate the transaction identifier for SEND interactions if the activity tracking service is to be used.&#xA;If a MAL operation is using the activity tracking service, when the interaction is started, the consumer shall populate and archive an OperationActivity object.&#xA;The OperationActivity object shall use the transaction identifier of the MAL operation for its object instance identifier.&#xA;The OperationActivity object shall use the domain of the MAL operation for its domain.&#xA;All Activity events for the interaction shall link to the OperationActivity object using their source link where the object instance identifier to use is the MAL interaction transaction identifier.&#xA;If a relay node is unable to relay the operation then that relay shall fail the MAL interaction that the consumer initiated as well as generate the correct activity event.&#xA;The executionStage field of the Execution event structure shall hold the current execution stage of the activity.&#xA;For SUBMIT, INVOKE, and PROGRESS interactions the ACKNOWLEDGE stage shall have an execution stage value of '1'.&#xA;For REQUEST interactions the RESPONSE stage shall have an execution stage value of '1'.&#xA;For PROGRESS interactions the execution stage value for the PROGRESS updates shall start at '2' and increate for each update sent.&#xA;For PROGRESS interactions the execution stage value for the RESPONSE shall be the total number of PROGRESS updates plus '2'.&#xA;The stageCount field of the Execution event structure shall be populated from the stage count row of Table 2-1.">
          <com:object name="OperationActivity" number="6">
            <com:objectType>
              <mal:type name="OperationActivity" service="ActivityTracking" area="COM"/>
            </com:objectType>
          </com:object>
        </com:objects>
        <com:events comment="The activity tracking service shall use the event service for the monitoring of activities being transferred from a consumer to a provider and also for execution in the provider.&#xA;A Release event shall be generated when an activity is released from a consumer.&#xA;A Reception event shall be generated when an activity is received by an intermediate relay.&#xA;A Forward event shall be generated when an activity is released from an intermediate relay.&#xA;An Acceptance event shall be generated when an activity is received by the destination provider.&#xA;Reception and Forward events shall only be used in a multi-hop activity transfer.&#xA;For Reception and Forward events, the source URI in the UpdateHeader of the published event shall contain the URI of the relay. It is protocol specific how this value is derived.&#xA;Execution progress of an activity shall be reported using Execution events.&#xA;The Execution event may be reported many times as it is used to report each stage in the execution of the activity.">
          <com:event name="Release" number="1"
                     comment="A Release event is release from source consumer.">
            <com:objectType>
              <mal:type name="ActivityTransfer" service="ActivityTracking" area="COM"/>
            </com:objectType>
            <com:sourceObject comment="The activity being monitored is the source of the event."/>
          </com:event>
          <com:event name="Reception" number="2"
                     comment="A Reception event is reception by an intermediate relay.">
            <com:objectType>
              <mal:type name="ActivityTransfer" service="ActivityTracking" area="COM"/>
            </com:objectType>
            <com:sourceObject comment="The activity being monitored is the source of the event."/>
          </com:event>
          <com:event name="Forward" number="3"
                     comment="A Forward event is release from an intermediate relay.">
            <com:objectType>
              <mal:type name="ActivityTransfer" service="ActivityTracking" area="COM"/>
            </com:objectType>
            <com:sourceObject comment="The activity being monitored is the source of the event."/>
          </com:event>
          <com:event name="Acceptance" number="4"
                     comment="An Acceptance event is reception and acceptance by the destination provider.">
            <com:objectType>
              <mal:type name="ActivityAcceptance" service="ActivityTracking" area="COM"/>
            </com:objectType>
            <com:sourceObject comment="The activity being monitored is the source of the event."/>
          </com:event>
          <com:event name="Execution" number="5"
                     comment="An Execution event is execution progress reporting by the destination provider.">
            <com:objectType>
              <mal:type name="ActivityExecution" service="ActivityTracking" area="COM"/>
            </com:objectType>
            <com:sourceObject comment="The activity being monitored is the source of the event."/>
          </com:event>
        </com:events>
        <com:archiveUsage comment="The events generated as part of the activity monitoring pattern may be persisted in a COM archive.&#xA;If the activity events are being persisted then the objects that represent the activities (such as an OperationActivity object) should also be persisted."/>
      </com:features>
    </mal:service>
    <mal:dataTypes>
      <mal:composite name="ObjectType" shortFormPart="1"
                     comment="The ObjectType structure uniquely identifies the type of an object. It is the combination of the area number, service number, area version, and service object type number. The combined parts are able to fit inside a MAL::Long (for implementations that prefer to index on a single numeric field rather than a structure).">
        <mal:extends>
          <mal:type name="Composite" area="MAL"/>
        </mal:extends>
        <mal:field name="area" canBeNull="false"
                   comment="Area Number where the object type is defined. Must not be '0' for values as this is the wildcard.">
          <mal:type name="UShort" area="MAL"/>
        </mal:field>
        <mal:field name="service" canBeNull="false"
                   comment="Service Number of the service where the object type is defined. Must not be '0' for values as this is the wildcard.">
          <mal:type name="UShort" area="MAL"/>
        </mal:field>
        <mal:field name="version" canBeNull="false"
                   comment="Area Version of the service where the object type is defined. Must not be '0' for values as this is the wildcard.">
          <mal:type name="UOctet" area="MAL"/>
        </mal:field>
        <mal:field name="number" canBeNull="false"
                   comment="The service specific object number. Must not be '0' for values as this is the wildcard.">
          <mal:type name="UShort" area="MAL"/>
        </mal:field>
      </mal:composite>
      <mal:composite name="ObjectKey" shortFormPart="2"
                     comment="The ObjectKey structure combines a domain and an object instance identifier such that it identifies the instance of an object for a specific domain.">
        <mal:extends>
          <mal:type name="Composite" area="MAL"/>
        </mal:extends>
        <mal:field name="domain" canBeNull="false" comment="The domain of the object instance.">
          <mal:type list="true" name="Identifier" area="MAL"/>
        </mal:field>
        <mal:field name="instId" canBeNull="false"
                   comment="The unique identifier of the object instance. Must not be '0' for values as this is the wildcard.">
          <mal:type name="Long" area="MAL"/>
        </mal:field>
      </mal:composite>
      <mal:composite name="ObjectId" shortFormPart="3"
                     comment="The ObjectId structure combines an object type and an object key such that it identifies the instance and type of an object for a specific domain.">
        <mal:extends>
          <mal:type name="Composite" area="MAL"/>
        </mal:extends>
        <mal:field name="type" canBeNull="false"
                   comment="The fully qualified unique identifier of the type.">
          <mal:type name="ObjectType" area="COM"/>
        </mal:field>
        <mal:field name="key" canBeNull="false"
                   comment="The combination of the object domain and object instance identifier.">
          <mal:type name="ObjectKey" area="COM"/>
        </mal:field>
      </mal:composite>
      <mal:composite name="ObjectDetails" shortFormPart="4"
                     comment="The ObjectDetails type is used to hold the extra information associated with an object instance, namely the related and source links.">
        <mal:extends>
          <mal:type name="Composite" area="MAL"/>
        </mal:extends>
        <mal:field name="related"
                   comment="Contains the object instance identifier of a related object (e.g. the ActionDefinition that an Action uses). This is service specific. The ObjectType of the related object is specified in the service specification. The related object must exist in the same domain as this object.">
          <mal:type name="Long" area="MAL"/>
        </mal:field>
        <mal:field name="source"
                   comment="An object which is at the origin of the object creation (e.g. the procedure from which an action was triggered).">
          <mal:type name="ObjectId" area="COM"/>
        </mal:field>
      </mal:composite>
      <mal:composite name="InstanceBooleanPair" shortFormPart="5"
                     comment="Simple pair of an object instance identifier and a Boolean value.">
        <mal:extends>
          <mal:type name="Composite" area="MAL"/>
        </mal:extends>
        <mal:field name="id" canBeNull="false" comment="The object instance identifier.">
          <mal:type name="Long" area="MAL"/>
        </mal:field>
        <mal:field name="value" canBeNull="false" comment="An associated Boolean value.">
          <mal:type name="Boolean" area="MAL"/>
        </mal:field>
      </mal:composite>
    </mal:dataTypes>
    <mal:errors>
      <mal:error name="INVALID" number="70000" comment="Operation specific"/>
      <mal:error name="DUPLICATE" number="70001" comment="Operation specific"/>
    </mal:errors>
  </mal:area>
</mal:specification>




© 2015 - 2024 Weber Informatics LLC | Privacy Policy