OASIS Mailing List ArchivesView the OASIS mailing list archive below
or browse/search using MarkMail.


Help: OASIS Mailing Lists Help | MarkMail Help

tamie message

[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index] | [List Home]

Subject: a shot at upgrading Find operation

 Here is what an upgrade to the "find" operation - considered a requirement in the F2F - could look like.
The operation can select a combination of events, possibly correlated based on content, possibly partially or totally ordered in time.
The name "Find" has been replaced by "Catch" to better reflect the synchronization aspect (not just the search aspect, in deferred mode).
The design outlined below borrows a lot from existing eTSL draft, but takes into account the ease of implementation with XSLT, for an easy baseline implementation :-)

Catch( <tryDuration>? <input>? <selector> <view>? )

Select one or more non-masked events from the event board within a time window. The selection is based on conditions expressed with external script languages, e.g. XPath or Xquery. The operation may wait for the event(s), acting as a synchronizing control.

To be eligible for selection by this operation, an event of the event board must satisfy the following conditions:

Only such events will be considered for selection. Selected events will be part of the result set for the operation.

The operation invocation can take two forms. (NOTE: the syntax reuses some XSLT syntax)

In the first form below (called here “referring form”), it refers to a “catcher” definition provided elsewhere, and identified by the attribute @catcher. Values can be given to parameters of the catcher definition. An optional <input> element defines the set of events to be used as input to the selection.

<catch tryduration=[xsd:duration] catcher=”catchername”>
<xsl:with-param name="myparam1" select="...."/>
<xsl:with-param name="myparam2">...</xsl:with-param>
... (other parameters)

In the “inline form”, the same selection elements that would be provided in a “catcher” definition (except for parameters), are provided inline, as shown in the following example:

<catch tryduration=[xsd:duration] >
<xsl:var name="V1"/>
<match name="E1" starting="initialDate">...</match>
<match name="E2" starting="initialDate" after=”E1”>...</match>

The <match> element will select one event based on a conditional expression specified in the <condition> child element. When a combination of two or more events needs be selected possibly based on different conditional expressions, each event will be named (here “E1” and “E2”), and an order (possibly partial) may be specified between these using the attribute @after. The <match> element may also include the setting of some variable with event data, to be reused in the selection expression of another <match> expression, allowing correlation between selected events based on their content.

The following is a more complete example of a “catcher” definition, that selects a sequence of three events representing an exchange of three messages:

The correlation between these events relies on variables V1 and V2.

<tam:catcher name="myevents">
  <xsl:param name="P1"/>
  <xsl:var name="V1"/>
  <xsl:var name="V2"/>
  <tam:match name="E1">
    <tam:condition language="xpath">[content/soap/Header/msgData/action = "PORequest"]</tam:condition>
    <tam:set var="V1">
      <xsl:value-of select="./content/soap/Header/msgData/property[@name='productref']"/>
  <tam:match name="E2" after="E1">
    <tam:condition language="xpath">[(content/soap/Header/msgData/action = "POAccept" or content/soap/Header/msgData/action = "POReject") and content/soap/Header/msgData/property[@name='productref'] = $V1]</tam:condition>
    <tam:set var="V2">
      <xsl:value-of select="./content/soap/Header/msgData/messageID"/>
  <tam:match name="E3" after="E2">
    <tam:condition language="xpath">[content/soap/Header/msgData/action = "POResponseReceipt" and content/soap/Header/msgData/messageID = $V2]</tam:condition>
<!-- eventset> a regular expression (E1, E2) </eventset -->

[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index] | [List Home]