-
Notifications
You must be signed in to change notification settings - Fork 34
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[repository schema] Disambiguation of attributes "presence" and "supported" #231
Comments
I would propose: Presence:
Supported:
And if deprecated, we can have some extra metadata informing about the removal and some elaboration text to describe the recommended alternative. Similar to what Java does: |
@JoanPuig, defining all non-documented tags as forbidden sounds like a great simplification for subsetting scenarios, especially in cases where the source scenario is very big and the subset is very small. It does require to fully declare the subset but I think that is in the interest . In theory and for FIX messages, everybody should be using FIX Latest (or a company-wide spec derived from FIX Latest) as initial source "scenario" (could be seen as base scenario). Using that base as reference, one can define a subset for an element (e.g. Instrument component) with a minimal set of attributes. The reference attribute (e.g. |
@JoanPuig, I support the proposal to change the We already have on attribute to point to the alternative, i.e. |
@JoanPuig, I agree that the value <fixr:fieldRef id="22" name="SecurityIDSource" presence="constant" value="1"/> Would using a literal type require to override the Using a rule is probably already possible with Orchestra v1.0 with <fixr:fieldRef id="22" name="SecurityIDSource">
<fixr:assign>1</fixr:assign>
</fixr:fieldRef> How about removing <fixr:fieldRef id="22" name="SecurityIDSource" presence="ignored" value="1"/> It also seems better suited for automated generation of specs out of Orchestra XML files compared to the use of a rule. |
My comments were not related to scenario inheritance. That is part of the problem I am trying to highlight, overloading those concepts for inheritance will be problematic down the road. The current definition is already a bit ambiguous. On a given message scenario (whatever way we have defined the inheritance, not important for this) there will be fields with different types. For each field, I would like to be able to express the following:
There are two other important concepts for a field:
Related to the supported status I would envision that from release to release a field would move through the following states: |
@JoanPuig can you help me understand your use of "deprecated" in your last comment. Is this standard FIX fields that have been deprecated by the standard, or fields marked as depreciated in your implementation spec? Just trying to understand your context. |
@JoanPuig agree with the flavors of deprecation as many spec issuers support the old fields prior to actual deprecation. I think we need to take into account that there are incoming and outgoing messages from the perspective of the issuer of a spec. The concept of tolerating a field only applies to incoming messages, only the issuer can "tolerate". The outgoing message may use the term "deprecated", but only in the sense of "still used". When the issuer decides to no longer use a field in an outgoing message, it should simply be removed. Here is a proposal to cover the state changes:
The This is a table with the combinations that can occur (rows for
|
@ltaikit the concept applies both to the FIX standard and specs that a service provider would produce. The idea is to be able to warn consumers that something they are using will change in the future in a machine readable way. If as a consumer my implementation is generating messages with fields tagged as ToBeDeprecated (using @kleihan nomenclature), I would want the FIX engine to issue a warning. Similarly, if an implementation is reading a field from an incoming message that is tagged as ToBeDeprecated, I would want the FIX engine to issue a warning. |
@kleihan I agree with the analysis of the different deprecation states and that they depend on direction. |
I have checked the use case for <fixr:fieldRef id="99" name="StopPx" presence="optional">
<fixr:rule name="StopOrderRequiresStopPx" presence="required">
<fixr:when>OrdType == ^Stop</fixr:when>
</fixr:rule>
<fixr:rule name="LimitOrderForbidsStopPx" presence="forbidden">
<fixr:when>OrdType \!= ^Stop</fixr:when>
</fixr:rule>
</fixr:fieldRef> The Orchestra examples use <fixr:code value="6" sort="6" added="FIX.2.7" supported="forbidden" id="40006" name="WithOrWithout">
<fixr:annotation>
<fixr:documentation purpose="SYNOPSIS">With Or Without/>
</fixr:annotation>
</fixr:code> How would we express these use cases if we remove It seems that ambiguity can also come from things that are valid as per the schema but not intended to be used that way. The schema may become overly complex if we try to enforce the intended usages. I see this as a question to answer for the discussion #235. How far should the role of the schema go to enforce the validity of an Orchestra XML file? Do we need a compatibility checker that goes beyond the validation against the schema, e.g. to detect the usage of Such a validator sits between the one only looking at the schema and the one that is specific to an encoding such as tag=value where we want to ensure additional things like naming conventions and field ordering. The definition of the term "valid" requires a defined context (schema, Orchestra semantics, encoding,...). These thoughts should feed into the necessary tooling that can be developed as a community. |
Orchestra provides two similar attributes (
presence
,supported
) with partially overlapping values.The attribute presence is part of the group, component and field references as well as the field definition (to define a constant value). The attribute
supported
is part ofentityAttribGrp
and not described in the specification.It is proposed to clarify the difference between the two and/or consolidate overlapping values. This is important to identify a potential use of one or the other to exclude specific elements from a scenario that is related to another scenario (see #212, #228).
The text was updated successfully, but these errors were encountered: