Design principles: Clone names
The v3 design principle states that when it comes to the interpretation of RIM-derived models one should be able to derive the full computable semantics of the model without having to look at the names of cloned classes. The purpose of the clone names is to both ensure unique type names for code generation and instance validation, as well as to make those semantics clear to the average human reader.
Two open issues:
- The above lore needs to be formally voted upon to document it, or if already ahs been voted upon we need a link to a document that contains the description.
- The description needs to be clarified to state that this extents to all RIM classes, and not (as some say) just those classes that are part of the normative or "upper" part of the RIM.
The fundamentals of this principle are that the semantics of v3 instances should be fully expressed using the 'semantic' attributes (classCode, moodCode, typeCode, etc.) and constraints on them. (E.g. fixed values, constrained domains, etc.) The meaning of an instance is found by looking at the RIM definitions and vocabulary definitions. Clone names are used to help expose the semantics expressed by these attributes to the casual reader. It is the responsibility of modelers to ensure that the clone names selected correspond to the constraints chosen.
The challenge to this position is found in the "bottom" half of the RIM where there are few, if any, semantic attributes exist. For those classes, the source of semantics is limited to RIM definitions as there is no structural vocabulary. For some classes, specifically query parameters, different clones have different semantics, but there is no mechanism to distinguish the different meaning of each clone. In theory, the semanticsText attribute could be used to formally express the semantics, but the use of this attribute has not been defined.
The question basically comes down to this:
- Should a new attribute be added to query parameter that provides an "ad-hoc" name for the parameter clone which would be used to tie the semantics of the clone to some outside implementation guide or specification, or is it legitimate to use the existing clone name for this purpose?