During a discussion of "physical" metamodel (i.e., the MOF-compliant
metamodel) issues, the following data types defined in the logical
metamodel Data Types package were identified as unused anywhere else:
o MessageDirectionKind
o Time
o Mapping
o TypeExpression
This note responds to an action to search the UML Specification document
to make sure this is actually true before we consider removing them from
the logical model. I performed this search by doing using the Acrobat
"Find" command on the PDF file for the UML Specification, which also
searches the diagrams.
o MessageDirectionKind: This data type is actually described in the
semantics as "no longer used in UML." And, indeed, it appears no where
in the document outside of the Data Types section, except for the index
and the parts of the IDL and the physical metamodel generated from the
Data Types package.
o Time: This data type is only referenced in the logical metamodel in
the text of the definition of a TimeExpression: "In the metamodel
TimeExpression defines a statement which will evaluate to an instance of
Time when it is evaluated." Thus, this type is not really necessary for
defining the metamodel, since TimeExpression is not further specified
(this will probably have to be dealt with as part of the action
semantics work.) In the IDL, the Time data type is implemented as
"UmlTime", which is a typedef of float. It appears as Time in the
physical metamodel.
o Mapping: This data type is only reference in the logical metamodel in
the text of the definition of a MappingExpression: "An expression that
evaluates to a mapping." As with Time, this type is not really necessary
for defining the metamodel, since the form of its "body" is not further
specified. It is implemented as a string in the IDL, but has no body
attribute in the physical metamodel.
o TypeExpression: This data type appears nowhere else in the Semantics
chapter than the Data Types section (except for the index). However, in
Notation Guide states:
"The type of an attribute is a TypeExpression. It may resolve to a class
name or it may be complex, such as array[String] of Point. In any case,
the details of the attribute type expressions are not specified by UML.
They depend on the expression syntax supported by the particular
specification or programming language being used."
Unfortunately, the abstract syntax requires that the type of an
attribute (or any structural feature) by a classifier (see Section
2.5.2). There is thus no way to map the notation for an attribute,
unless the type expression happens to be the name of a classifier. The
use of a general type expression is desirable, so this should be
corrected.
(One possible approach, which would preserve the definition of an
attribute type as a classifier, would be to make TypeExpression a child
of Classifier as well as Expression. This could also be useful on
instance diagrams, since it would allow one to show instances of
implementation-specific type expressions.)