[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

RE: FpML-VAL Re: proposal for 11 additional validation rules for contracts messaging



Title: Message
All the rules correlating messageId should take into account the messageIdSchema attribute, for example in  msg-1 the combination of @messageIdScheme and messageId MUST be unique as messageId by itself could be non-unique.
 
- Andrew 
 
 -----Original Message-----
From: valwg@xxxxxxxx [mailto:valwg@xxxxxxxx] On Behalf Of Simon Heinrich
Sent: 28 September 2007 07:46
To: matthew@xxxxxxxxxxxxxxx
Cc: valwg@xxxxxxxx; Marc Gratacos; andrew.p.parry@xxxxxxxxxxxx
Subject: FpML-VAL Re: proposal for 11 additional validation rules for contracts messaging

Thankyou Matthew,

As you know all contributions are gratefully received.

We will review these rules at the next VWG meeting, which given SIBOS next week will be on Tuesday 9th October.

Cheers,

Simon

Matthew Rawlings wrote:

Dear VWG,

Please find attached a proposal for 11 additional validation rules for Contracts messaging.

These rules close out many ambiguities in processing the Contracts messages. Andrew Parry is the original author of the Contracts messages, and so we should review with Andrew the additional validation rules.

Matthew Rawlings

+44 791 539 7824




<!--[if mso 9]--> <!--[endif]-->

FpML 4.4 Validation Rules - Rules for Messaging

This section is the constraints that implement the Business Process definition and Messaging definition in the FpML 4.4 Working Draft.

These constraints apply to the set of all known messages to validate the Business Process and Messaging definitions. The rules are tested by applying to the collection of all messages available, both sent and received. Each message is referred to as a “document”, as this meets the requirement to use XPath 2.0 for paths.

The constraints are written as invariant rules that return “false” when they are failed and “true” when they are satisfied. The constraints are written to accommodate the open world assumption that there may be other messages that are not yet known about. For example messages that have not yet been sent or arrived are unknown.

A subset of constraints is identified as “Warnings”. These constraints are used when knowledge from a message is expected but absent and it is impossible to distinguish between the messages being incorrect and the message not yet being known about. For example a Request might not yet be known about to match to a Response.

The constraints that are not “Warnings” are termed “Mandatory” constraints, which is consistent with all other rules.

Content

Rules

Unique contexts:

Functions

The Validation Functions factor out common comparison functions for FpML complex types. Many comparisons can work using built in XPath 2.0 comparison operators and functions, but where FpML has custom types a function may be needed.

The Validation Functions are only used when specific rules reference them. The functions do not change the context nor the nodes supplied to them. The order of parameters will always be stated in the rule where it is significant.

Function: ContractIdentifierEqual($contractId1 as ContractIdentifier, $contractId2 as ContractIdentifier) as xs:boolean

The result is true where any $contractId1//element(*, ContractId) correlates to any $contractId2//element(*, ContractId). The comparison function for correlation is fn:deep-equal().

Context: collection()

msg-1 (Mandatory)

Every /FpML/header/messageId must be unique. The comparison function is fn:deep-equal().

(: MessageId is unique :)

Context: collection()

msg-2 (Warning)

Every /FpML/header/inReplyTo must correlate to one /FpML/header/messageId. The comparison function for correlation is fn:deep-equal().

(: A reply must be in response to a message. You may not yet have the message being responded to :)

Context: collection()

msg-3 (Mandatory)

Every /FpML/header/inReplyTo must not correlate to a /FpML/header/messageId in the same document. The comparison function for correlation is fn:deep-equal().

(: A message cannot reply to itself. :)

Context: collection()

msg-4 (Mandatory)

Every /element(*, MessageRejected)/header/inReplyTo must not correlate to  /element(*, MessageRejected)/header/messageId. The comparison function for correlation is fn:deep-equal().

(: If you know it is a MessageRejected message then it may not be rejected :)

Context: collection()

msg-5 (Mandatory)

Every /element(*, ContractCreated)/contract/header/identifier must be unique. The comparison function is ContractIdentifierEqual().

(: Contract identifiers are unique and a contract may only be created once :)

Context: collection()

msg-6 (Warning)

At least one /element(*, ContractCancelled)/contractReference/identifier per document must correlate to a /element(*, ContractCreated)/contract/header/identifier. The comparison function is ContractIdentifierEqual().

(: A ContractCancelled must cancel a contract in a ContractCreated message. You may not yet have the ContractCreated message. :)

Context: collection()

msg-7 (Warning)

At least one /element(*, ContractFullTermination)//contractReference/identifier per document must correlate to a /element(*, ContractCreated)/contract/header/identifier. The comparison function is ContractIdentifierEqual().

(: A ContractFullTermination must terminate a contract in a ContractCreated message. You may not yet have the ContractCreated message. :)

Context: collection()

msg-8 (Warning)

At least one /element(*, ContractIncreased)//contractReference/identifier per document must correlate to a /element(*, ContractCreated)/contract/header/identifier. The comparison function is ContractIdentifierEqual().

(: A ContractIncreased must increase a contract in a ContractCreated message. You may not yet have the ContractCreated message. :)

Context: collection()

msg-9 (Warning)

At least one /element(*, ContractNovated)//oldContractReference/identifier per document must correlate to a /element(*, ContractCreated)/contract/header/identifier. The comparison function is ContractIdentifierEqual().

(: A ContractNovated must novate a contract in a ContractCreated message. You may not yet have the ContractCreated message. :)

Context: collection()

msg-10 (Warning)

At least one /element(*, ContractPartialTermination)//contractReference/identifier per document must correlate to a /element(*, ContractCreated)/contract/header/identifier. The comparison function is ContractIdentifierEqual().

 

(: A ContractPartialTermination must partially terminate a contract in a ContractCreated message. You may not yet have the ContractCreated message. :)

Context: collection()

msg-11 (Mandatory)

Every /element(*, ContractFullTermination)/termination/contractReference/identifier must be unique.

(: A contract can be terminated only once. :)

Deprecated rules


----------------------------
IONA Technologies UK Limited (UK registered)
Registered Number: 03386680
Registered Address: 3000, Hillswood Drive, Hillswoood Business Park, Chertsey, Surrey, KT160RS, United Kingdom