Specification of the `Types` package of the Object Constraint Lanuage version 2.0 Abstract Syntax model.

## Package Specification

This package defines the API for the structure of parsed OCL expressions, as described in the `Types` package of the OCL specification version 2.0 with some extensions for this parser implementation. These extensions include:

- implementation of a {@link org.eclipse.ocl.utilities.PredefinedType PredefinedType} interface to provide access to the name and operations of the types defined by the OCL Standard Library
- definition of primitive-type metaclasses that the OCL specification erroneously references from UML, where they do not exist; UML only defines the instances (which are M1 classes) of these metaclasses (but not `Real`) and metaclasses for their literal values
- specification of an {@link org.eclipse.ocl.types.OCLStandardLibrary} interface providing access to a particular OCL environment's implementation of the standard library types

None of these extensions of the model affects the XMI serialization of OCL expressions which, as much as possible, is conformant to the OCL specification.

Clients providing metamodel bindings for OCL (i.e., implementations of the {@link org.eclipse.ocl.Environment API} are required to define a package of type metaclasses extending those in this package. The OCL specification defines generalizations of all of these types to either the Classifier or DataType metaclasses of the UML (or EMOF or Core::Basic, according to the binding). Thus, providers of OCL bindings must ensure that their implementations of these OCL types specialize the appropriate metaclasses from their metamodels. This ensures that the OCL type system (for a particular environment) is uniform, so that typed elements such as {@link org.eclipse.ocl.expressions.OCLExpression}s and {@link org.eclipse.ocl.expressions.Variable}s can be correctly typed by the OCL standard types (and the environment can implement the `OCLStandardLibrary` interface).

@see org.eclipse.ocl.types.PrimitiveType @see org.eclipse.ocl.types.AnyType @see org.eclipse.ocl.types.CollectionType @see org.eclipse.ocl.types.OCLStandardLibrary @see org.eclipse.ocl.utilities.TypedElement